0

I have: public class TestButton extends ImageButton {....

I have some code which generates a null pointer exception at:

  final Drawable temp1 = babyview.getDrawable();

Before this I use:

 public void dancebabydance() {
  babyview = (ImageView) findViewById(R.id.baby);

Here is the xml portion:

<ImageView
    android:id="@+id/baby"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:src="@drawable/dbaby2"
     />

I am ideally trying to compare this dbaby2 to a drawable and see if they are equal, and if they are change them to something new.

Can this be done extending ImageButton like this? Where am I stuffing up?

4

2 回答 2

2

问题在第二部分

babyview = (ImageView) findViewById(R.id.baby);

在类(它是一个Activity?)视图中没有这样的视图。它通常由于以下三个原因之一而发生:

1)你忘了setContentView

2)您在打电话之前尝试查看setContentView

3)你使用了错误的布局setContentView

于 2013-09-13T03:43:51.033 回答
1

我建议使用该android:tag字段来设置一个String您可以比较的值。没有其他方法适合您。

getDrawable()只有在您调用代码时才会有值setImageDrawable()。如果您试图获取您在android:src属性中提供的可绘制对象.. 那么您必须直接从资源中获取它,您无法从ImageView.

如果您知道资源 ID(例如 R.id.my_drawable)并且想要获取 Drawable,您可以使用:

Drawable d = getResources().getDrawable(android.R.drawable.my_drawable);
    ImageView image = (ImageView)findViewById(R.id.image);
    image.setImageDrawable(d);

如果您不知道资源 ID,请查看此处的答案。

但是你可以得到 a BitmapImageView你可以打电话setDrawingCacheEnabled(true)然后打电话getDrawaingCache()来得到一个Bitmap。如果你这样做记得设置setDrawingCacheEnabled(false).

于 2013-09-13T03:48:39.307 回答