2010-12-07 3 views
1

디지털 시계 위젯이 있으며 시간을 표시하는 데 사용자 정의 글꼴을 사용하고 싶습니다. 나는 그것이 remoteviews에서 할 수 없다는 것을 알고, 그래서 비트 맵에 사용자 정의 글꼴을 렌더링하고 원격 뷰를 가로 질러 그것을 이미지 뷰로 푸시하는 코드를 얻었다. 그러나, 나는 그것을 작동시킬 수 없습니다. 지금까지 내 코드 :사용자 정의 글꼴을 사용하여 시간을 표시하는 데 문제가 있습니다.

 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); 
    } 

도움을 주시면 감사하겠습니다.

+1

"그러나 작동하지 않습니다." - 정말로 도움이 필요하다면, 문제를 설명 할 수있는 더 나은 일을해야합니다. – CommonsWare

답변

3

저는 (숙련 된 개발자의 도움을 받아) 작동 방법을 알아 냈습니다. 최종 코드는 다음과 같습니다.

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; 
} 
관련 문제