Question

J'ai un widget horloge numérique, et je veux utiliser une police personnalisée pour afficher l'heure. Je sais que ce ne peut pas être fait en remoteviews, donc je l'ai obtenu un code qui rend la police personnalisée à un bitmap et pousse ensuite à travers remoteviews à un imageview. Cependant, je suis incapable de le faire au travail. Ceci est mon code à ce jour:

        public Bitmap buildUpdate(String time)
    {
            RemoteViews views = new RemoteViews(this.getPackageName(), R.layout.main);
            Bitmap myBitmap = Bitmap.createBitmap(100, 50, Bitmap.Config.ARGB_4444);
            Canvas myCanvas = new Canvas(myBitmap);
            Paint paint = new Paint();
            Typeface clock = Typeface.createFromAsset(this.getAssets(),"Clockopia.ttf");
            paint.setAntiAlias(true);
            paint.setSubpixelText(true);
            paint.setTypeface(clock);
            paint.setStyle(Paint.Style.FILL);
            paint.setColor(Color.WHITE);
            paint.setTextSize(15);
            myCanvas.drawText(time, 0, 20, paint);
            views.setImageViewBitmap(R.id.TimeView, myBitmap);
            return myBitmap;
            }

    private void update() {
        mCalendar.setTimeInMillis(System.currentTimeMillis());
        final CharSequence date = DateFormat.format(mDateFormat, mCalendar);
        final CharSequence day = DateFormat.format(mDayFormat, mCalendar);
//        final CharSequence time = DateFormat.format(mTimeFormat, mCalendar);
        String time = (String) DateFormat.format(mTimeFormat, mCalendar);
        RemoteViews views = new RemoteViews(getPackageName(), R.layout.main);
        views.setTextViewText(R.id.Day, day);
        views.setTextViewText(R.id.Date, date);
//        views.setTextViewText(R.id.Time, time);
        buildUpdate(time);
        ComponentName widget = new ComponentName(this, DigiClock.class);
        AppWidgetManager manager = AppWidgetManager.getInstance(this);
        manager.updateAppWidget(widget, views);
    }

Toute aide est appréciée.

Était-ce utile?

La solution

Je l'ai maintenant trouvé (avec l'aide d'un développeur expérimenté) comment faire fonctionner. Le code final est maintenant:

    private void update() {
    mCalendar.setTimeInMillis(System.currentTimeMillis());
    final CharSequence date = DateFormat.format(mDateFormat, mCalendar);
    final CharSequence day = DateFormat.format(mDayFormat, mCalendar);
    String time = (String) DateFormat.format(mTimeFormat, mCalendar);
    RemoteViews views = new RemoteViews(getPackageName(), R.layout.main);
    views.setTextViewText(R.id.Day, day);
    views.setTextViewText(R.id.Date, date);
    views.setImageViewBitmap(R.id.TimeView, buildUpdate(time));
    ComponentName widget = new ComponentName(this, DigiClock.class);
    AppWidgetManager manager = AppWidgetManager.getInstance(this);
    manager.updateAppWidget(widget, views);
}

    public Bitmap buildUpdate(String time) 
{
        Bitmap myBitmap = Bitmap.createBitmap(160, 84, Bitmap.Config.ARGB_4444);
        Canvas myCanvas = new Canvas(myBitmap);
        Paint paint = new Paint();
        Typeface clock = Typeface.createFromAsset(this.getAssets(),"Clockopia.ttf");
        paint.setAntiAlias(true);
        paint.setSubpixelText(true);
        paint.setTypeface(clock);
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(Color.WHITE);
        paint.setTextSize(65);
        paint.setTextAlign(Align.CENTER);
        myCanvas.drawText(time, 80, 60, paint);
        return myBitmap;
 }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top