0

ウィジェットの構成段階で、レイヤー リストの一部であるビットマップを更新したいと考えています。RemoteViews と Widgets のすべての制限により、これを達成することはできません。新しい LayerDrawable を手動で作成することも、drawable を取得して更新することもできませんでした。アイデアはありますか?

背景: ウィジェットには、写真とその他の情報が表示されます。写真は、正方形、横向き、または縦向きであっても、適切に額縁に入れ、適切に拡大縮小する必要があります。

画層リスト:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/photo_01"></item>
    <item android:drawable="@drawable/photo_border"></item>
</layer-list>

ドローアブル @drawable/photo_border は 9 パッチのビットマップです。

レイアウトの対応する部分:

<!-- ... -->
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:padding="20dp" >

    <ImageView
        android:id="@+id/photo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:adjustViewBounds="true"
        android:padding="4dp"
        android:scaleType="fitCenter"
        android:src="@drawable/framed_placeholder" />

</RelativeLayout>
<!-- ... -->

あなたの考えを共有してくれてありがとう。

4

1 に答える 1

0

問題を解決しているうちに、Bitmap を手動でレンダリングして imageView を更新するだけでよいことがわかりました。これがコードです。それは良くありませんが、仕事を終わらせましょう。

これはおそらく、密度などの処理を改善することで改善される可能性があります。

Bitmap bmp = BitmapFactory.decodeFile(sdCard.getAbsolutePath() + pathName);
Bitmap cBitmap = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), Config.ARGB_8888);
Canvas c = new Canvas(cBitmap);
c.drawBitmap(bmp, 0, 0, null);
NinePatchDrawable photo_border = (NinePatchDrawable) context.getResources().getDrawable(R.drawable.photo_border);
photo_border.setBounds(0, 0, bmp.getWidth(), bmp.getHeight());
photo_border.draw(c);

views.setImageViewBitmap(id.photo, cBitmap);

1 つの注意点: SD カードがマウントされていない場合、電話の起動時にウィジェットが Update イベントを受け取る場合があります。それまで待つか、構成をスキップしてインテントフィルターを追加する必要があります(それが私がしたことです)

<intent-filter>
    <action android:name="android.intent.action.MEDIA_MOUNTED"/>
    <data android:scheme="file"></data>
</intent-filter>
于 2012-12-14T11:53:04.020 に答える