【问题标题】:Null pointer exception on getting drawable from ImageVeiw从 ImageVeiw 获取可绘制的空指针异常
【发布时间】:2013-09-13 03:32:24
【问题描述】:

我有: 公共类 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 与可绘制对象进行比较,看看它们是否相等,以及是否将它们更改为新的东西。

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

【问题讨论】:

  • 这可能很愚蠢,但是您是否将 contentView 设置为您的 ImageView 所属的任何布局?
  • 您从哪里拨打dancebabydance()?也发布那部分
  • 如我的回答中所述,使用android:tag 设置String 并使用它来比较您的图像...您可以将资源ID设置为标签值或设置资源名称.. .
  • 是的,我没有在这个类中设置 contentView,我猜是这样

标签: java android nullpointerexception drawable


【解决方案1】:

问题出在第二部分

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

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

1) 你忘了setContentView

2) 您尝试在致电setContentView 之前获取视图

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

【讨论】:

    【解决方案2】:

    我建议使用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

    但是,您可以获得ImageViewBitmap。 您可以致电setDrawingCacheEnabled(true),然后致电getDrawaingCache() 以获取Bitmap。如果你这样做记得设置setDrawingCacheEnabled(false)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多