2012-02-20 7 views
0

나는 안드로이드에서 모든 종류의 이미지를 생성/변경하는 것에 익숙합니다. 내가 뭘하려고하는지 다음과 같습니다 :android : 위젯에 맞춤 이미지를 추가하는 방법은 무엇입니까?

나는 브로드 캐스트 수신기에서 정기적으로 업데이 트되는 가져옵니다. 문제는,이 위젯에 자체 제작 (즉, 프로그래밍 방식으로 생성) 된 이미지를 표시하고 싶습니다. 실제로 위젯 레이아웃에 이미지를 추가하는 방법을 모르겠습니다. 누군가 나를 도울 수 있습니까? 위젯을 업데이트하는 코드를 heres :

public class MyReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context.getApplicationContext()); 

     int[] allWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS); 

     // DO SOME THINGS... 

     ComponentName myWidget = new ComponentName(context.getApplicationContext(), MyWidgetProvider.class); 

     int[] allMyWidgetIds = appWidgetManager.getAppWidgetIds(myWidget); 

     for (int widgetId : allMyWidgetIds) { 
      RemoteViews rViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
      rViews.setTextViewText(R.id.TextView01, "xyz"); // this works just fine, i.e. it gets updated as intended :) 

      appWidgetManager.updateAppWidget(widgetId, rViews); 
     } 

     // set next update 
     Calendar c = Calendar.getInstance(); 
     c.add(Calendar.SECOND, Config.UPDATE_RATE); 

     Date d = new Date(c.getTimeInMillis()); 
     Intent i = new Intent(context.getApplicationContext(), MyReceiver.class); 

     i.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds); 
     PendingIntent sender = PendingIntent.getBroadcast(context.getApplicationContext(), 0, i, PendingIntent.FLAG_UPDATE_CURRENT); 

     AlarmManager aManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     aManager.set(AlarmManager.RTC, d.getTime(), sender); 
    } 
} 

이렇게 잘 작동합니다. "xyz"가 TextView에 쓰여진 줄에서 이전에 어셈블 링 된 데이터 (즉, 방송 수신자)가 의도 한대로 표시됩니다. 즉, 업데이트됩니다. 이 시점에서이 데이터를 '그리는', 즉 위젯에 표시되어야하는 그래프를 작성하고 싶습니다.

하지만 어떻게해야합니까? 나는 결국 drawable을 가질 것 같아요. 어떻게 실제로 위젯에 표시되도록하려면 어떻게해야합니까?

업데이트 :

그래픽을 처리해야하는보기 클래스입니다. 지금까지는 짧은 선을 그 으려합니다.

public class Chart extends View { 
    public Chart(Context context) { 
     super(context); 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 
     canvas.drawColor(Color.WHITE); 

     Paint paint = new Paint(); 
     paint.setFlags(Paint.ANTI_ALIAS_FLAG); 
     paint.setColor(Color.BLACK); 

     canvas.drawLine(0, 0, 30, 30, paint); 
    } 
} 

위젯의 레이아웃이 꽤 지루 : 내가 활동에 된 setContentView()를 통해보기로 이것을 설정하면이 작동

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/widget_layout" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_margin="8dip" 
    android:background="@drawable/traffic_shape" > 
    <TextView 
     android:id="@+id/TextView01" 
     android:text="test" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
    </TextView> 
    <ImageView 
     android:id="@+id/graph" 
     android:contentDescription="blah" 
     android:src="@drawable/icon" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
    </ImageView> 
</LinearLayout> 

아니, 난 내가에서 만든 뷰를 얻는 방법 위젯에 내 Chart 클래스를 표시 하시겠습니까? 불행하게도 리모트 뷰 RemoteViews 내가 내 자신의 질문에 대답해야처럼

+0

나는하지 당신을 아주 이미지 뷰를 추가, 레이아웃에서 텍스트 뷰를 가지고처럼 그것을 얻을 당신이 –

+0

찾고있는 그 밖의 무엇 예 -이 이미지보기가 있습니다. 이제 가정 해 봅시다.이 클래스 x가 "보기"를 확장하고 있습니다. 거기에 내 이미지를 만들 ...하지만 지금 : 어떻게 레이아웃의 XML에서 정의 된 imageview에 표시 할보기 (클래스 x로 표시)를 얻을 수 있나요? – xenonite

답변

1

보이는 :(...이 보인다 뷰를 설정할 수있는 기능을 제공하지 않습니다. 코드> :(

고민의 고통 스럽다 시간 후에 답을 발견 이 같은 Graph.java 인 STH와
for (int widgetId : allWidgetIds) 
{ 
    RemoteViews rViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 

    Graph graph = new Graph(); 
    rViews.setImageViewBitmap(R.id.graph, graph.getBitmap()); 

    appWidgetManager.updateAppWidget(widgetId, rViews); 
} 

:.?

public class Graph { 
    public Bitmap getBitmap() { 
     Bitmap bitmap = Bitmap.createBitmap(128, 128, Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(bitmap); 

     canvas.drawColor(Color.WHITE); 

     Paint paint = new Paint(); 

     paint.setFlags(Paint.ANTI_ALIAS_FLAG); 
     paint.setColor(Color.RED); 
     canvas.drawLine(0, 0, 128, 128, paint); 
     return bitmap; 
    } 
} 
관련 문제