3

ユーザーがカラーピッカーからウィジェットの背景の色を選択できる構成アクティビティを備えたウィジェットがあります。以下のメソッドを使用して、ImageView を持っていて、ImageView に動的に設定するビットマップを作成しています。

http://konsentia.com/2011/03/dynamically-ching-the-background-color-in-android-widgets/

public static Bitmap getBackground (int bgcolor)
{
try
    {
        Bitmap.Config config = Bitmap.Config.ARGB_8888; // Bitmap.Config.ARGB_8888 Bitmap.Config.ARGB_4444 to be used as these two config constant supports transparency
        Bitmap bitmap = Bitmap.createBitmap(2, 2, config); // Create a Bitmap

        Canvas canvas =  new Canvas(bitmap); // Load the Bitmap to the Canvas
        canvas.drawColor(bgcolor); //Set the color

        return bitmap;
    }
    catch (Exception e)
    {
        return null;
    }
}

それで

remoteViews.setImageViewBitmap(R.id.bgcolor, getBackground(bgcolor));

私がやりたいことは、ユーザーがウィジェットの角を丸くするかどうかも選択できるようにすることです。色とウィジェットの角を丸くするかどうかの両方を動的に変更することは可能ですか? 角を丸くするために私が見た例から、ビットマップを設定する前にエッジを丸めることができるように、ビューの寸法を知る必要があるようです。ウィジェット内からこれが可能だとは思いませんが...何かアイデアはありますか?

4

2 に答える 2

10

これを行うには2つの方法があります。

  1. (既存の方法を使用して)角が丸い/正方形のビットマップを作成します。これは、おおよそ必要なウィジェットのサイズです。これには、ユーザーがウィジェットのサイズを変更したり、考慮していない画面解像度/ DPIのデバイスでウィジェットを使用したりすると、ビットマップが歪むリスクがあります。
  2. 角が丸く、角が四角い白い9パッチビットマップリソースを作成し、 RemoteViews.setIntを使用して、ウィジェットの背景ImageView(Froyo以上が必要)の色/透明度を変更します。

    if(roundCorners)
        remoteViews.setImageViewResource(R.id.widget_background, R.drawable.round_corners);
    else
        remoteViews.setImageViewResource(R.id.widget_background, R.drawable.square_corners);  
    
    remoteViews.setInt(R.id.widget_background, "setColorFilter", someColor);
    remoteViews.setInt(R.id.widget_background, "setAlpha", someAlphaLevel);
    

私は両方の方法を使用しましたが、互換性を最大にするために(2)をお勧めします。

于 2012-04-25T09:56:21.273 に答える