4

RelativeLayout を継承するカスタム コンポーネントを作成しようとしています。

私のxmlレイアウトファイルには、次のものがあります。

<Mycomponent 
    android:src="@drawable/my_test_image">
      <TestView>
</Mycomponent>

私の質問は、Mycomponent のコンストラクターで Drawable クラスを作成するにはどうすればよいですか?

ImageView のソースコードを読んでみましたが、一部の android Internal.R に試したようです。

とにかく、コードでそれを行うことができますか?

ありがとうございました。

4

2 に答える 2

16

Luksprog は間違っていると思います。AttributeSet を呼び出すだけで、スタイルを設定せずにカスタム コンポーネントの「src」データにアクセスする簡単な解決策があります。

attrs.getAttributeResourceValue(" http://schemas.android.com/apk/res/android ", "src", 0);

ここで、ビットマップのサイズをより安くする私の例を見ることができます。

public CustomView(Context context, AttributeSet attrs) {
 super(context, attrs);
 int src_resource = attrs.getAttributeResourceValue("http://schemas.android.com/apk/res/android", "src", 0);
 this.setImageBitmap(getDrawable(getResources(),src_resource));
}

public static Bitmap getDrawable(Resources res, int id){
    return BitmapFactory.decodeStream(res.openRawResource(id));
}

これで、次のような xml が作成されます。

<com.example.com.jfcogato.mycomponent.CustomView
    android:id="@+id/tAImageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:src="@drawable/big_image_example"/>
于 2013-03-25T16:31:58.563 に答える
1

これを行うことができるという提案も見ました...

    int attributeIds[] = { android.R.attr.src };
    TypedArray a = context.obtainStyledAttributes(attributeIds);
    int resourceId = a.getResourceId(0, 0);
    a.recycle();

私の経験では、このコードはコンパイルされますが、実行時に 0 が返されます。

そうそう...上記のjfcogatoの答えに行きます。

于 2014-06-06T21:36:18.230 に答える