android:如何将自定义图像添加到小部件?

android:如何将自定义图像添加到小部件?,android,graphics,drawable,Android,Graphics,Drawable,我对在安卓系统中创建/修改任何类型的图像都是新手。我想做的是: 我有一个小部件,可以从广播接收器定期更新。问题是,我想在这个小部件中显示一个自制(即编程创建的)图像。我实际上不知道如何将图像添加到小部件布局中。 有人能帮我吗?以下是更新小部件的代码: public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent)

我对在安卓系统中创建/修改任何类型的图像都是新手。我想做的是:

我有一个小部件,可以从广播接收器定期更新。问题是,我想在这个小部件中显示一个自制(即编程创建的)图像。我实际上不知道如何将图像添加到小部件布局中。 有人能帮我吗?以下是更新小部件的代码:

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的行中,我先前(在broadcastreceiver中)收集的数据按预期显示,即得到更新。 此时,我想“绘制”这些数据,即创建一个应该显示在小部件中的图形

但是:我该怎么做呢?我想我最后会有一个抽绳的。我该如何在小部件中显示它(当然也要更新)

更新:

这是应该进行图形处理的视图类。到目前为止,它只是画了一条短线。如果我在活动中通过setContentView()将其设置为视图,则此操作有效:

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);
    }
}
小部件的布局非常无聊:

<?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>


否如何使我在图表类中创建的视图显示在小部件中?不幸的是,RemoteView不提供任何功能来设置视图,就像它看起来的那样…:(

看起来我必须回答我自己的问题。在与代码苦苦挣扎数小时后找到了答案>:(

Graph.java是这样的:

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

我不太明白,就像你在布局中有一个文本视图一样,添加一个图像视图。你还想要什么?是的,我有这个图像视图。现在让我们假设,我有一个扩展了“视图”的类x,我确实在那里创建了我的图像……但是现在:我如何获得视图(由类x表示)要在布局的xml中定义的imageview中显示?
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;
    }
}