4

我正在尝试创建一个继承自RelativeLayout 的自定义组件。

在我的 xml 布局文件中,我有:

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

我的问题是如何在 Mycomponent 的构造函数中创建一个 Drawable 类?

我试图阅读 ImageView 的源代码,但似乎尝试了一些 android Internal.R 。

无论如何我可以在我的代码中做到这一点。

谢谢你。

4

2 回答 2

16

我认为 Luksprog 是错误的,我有一个简单的解决方案来访问您的自定义组件“src”数据而无需样式化,只需调用 AttributeSet:

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

在这里你可以看到我的例子,让位图尺寸更便宜,jeje。

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 回答