从ImageView获取drawable时出现空指针异常

时间:2013-09-13 03:32:25

标签: java android nullpointerexception drawable

我有:     公共类TestButton扩展了ImageButton {....

我有一些代码在:

生成空指针异常
  final Drawable temp1 = babyview.getDrawable();

在此之前我使用:

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

这是xml部分:

<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"
     />

我理想地尝试将此dbaby2与drawable进行比较,看看它们是否相等,以及是否将它们更改为新的。

这样可以像这样扩展ImageButton吗?我在哪里填充?

2 个答案:

答案 0 :(得分:2)

问题出在第二部分

babyview = (ImageView) findViewById(R.id.baby);
在课堂上

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

1)你忘了setContentView

2)在调用setContentView

之前,您尝试查看

3)您在setContentView

中使用了错误的布局

答案 1 :(得分:1)

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

如果您在代码中调用getDrawable()

setImageDrawable()将只有一个值。 如果您想获得android:src属性中提供的drawable,那么您必须直接从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,请查看答案here

但是,您可以获得Bitmap的{​​{1}}。 您可以致电ImageView,然后致电setDrawingCacheEnabled(true)获取getDrawaingCache()。如果您这样做,请记住设置Bitmap