2013-02-04 65 views
3

当我执行this文档中描述的剪辑可绘制示例时,ImageView.getDrawable始终返回null。任何人都可以帮我吗?从图像视图获取Drawable

在MainActivity.java的onCreate

@Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ImageView imageview = (ImageView) findViewById(R.id.image); 
     ClipDrawable drawable = (ClipDrawable) imageview.getDrawable(); 
     drawable.setLevel(drawable.getLevel() + 1000); //Line number 21 
    } 

logcat的

02-04 12:16:31.156: E/AndroidRuntime(4611): FATAL EXCEPTION: main02-04 12:16:31.156: E/AndroidRuntime(4611): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.MainActivity}: java.lang.NullPointerException 

02-04 12:16:31.156: E/AndroidRuntime(4611):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 

02-04 12:16:31.156: E/AndroidRuntime(4611):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 

02-04 12:16:31.156: E/AndroidRuntime(4611):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 

02-04 12:16:31.156: E/AndroidRuntime(4611):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 

02-04 12:16:31.156: E/AndroidRuntime(4611):  at android.os.Handler.dispatchMessage(Handler.java:99) 

02-04 12:16:31.156: E/AndroidRuntime(4611):  at android.os.Looper.loop(Looper.java:123) 

02-04 12:16:31.156: E/AndroidRuntime(4611):  at android.app.ActivityThread.main(ActivityThread.java:3683) 

02-04 12:16:31.156: E/AndroidRuntime(4611):  at java.lang.reflect.Method.invokeNative(Native Method) 

02-04 12:16:31.156: E/AndroidRuntime(4611):  at java.lang.reflect.Method.invoke(Method.java:507) 

02-04 12:16:31.156: E/AndroidRuntime(4611):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 

02-04 12:16:31.156: E/AndroidRuntime(4611):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 

02-04 12:16:31.156: E/AndroidRuntime(4611):  at dalvik.system.NativeStart.main(Native Method) 

02-04 12:16:31.156: E/AndroidRuntime(4611): Caused by: java.lang.NullPointerException 

02-04 12:16:31.156: E/AndroidRuntime(4611):  at com.example.test.MainActivity.onCreate(MainActivity.java:21) 

02-04 12:16:31.156: E/AndroidRuntime(4611):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 

02-04 12:16:31.156: E/AndroidRuntime(4611):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 

02-04 12:16:31.156: E/AndroidRuntime(4611):  ... 11 more 
+0

分享你的logcat 也是你的一段代码 –

+0

@Dinesh你想拍摄一下imageview的快照吗? –

+0

@UsurKurd我已经添加了log-cat输出 –

回答

2

您必须覆盖onWindowsFocusChanged()

@Override 
public void onWindowFocusChanged(boolean hasWindowFocus) { 
    super.onWindowFocusChanged(hasWindowFocus); 
    ClipDrawable drawable = (ClipDrawable) imageview.getBackground(); 
    drawable.setLevel(drawable.getLevel() + 1000); //Line number 21 
} 

的ImageView的还没有正常显示,当你试图获取其价值(可绘制的图像)。 onWindowsFocusChanged()会通知用户视图已经被加载,这是您可以获取其数据的时间。

+0

仍然null null –

+2

我更新了我的代码,而不是'imageview.getDrawable'改为'image.getBackground()'。 –

+0

谢谢@SheSmile它的工作正常,我已经在按钮onclick中添加一个按钮,我已经做了drawable。setLevel –

1

可能你会得到null drawable所以这种错误会occure。

第一个set任何imageImageView所以你会得到Drawable。

protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ImageView imageview = (ImageView) findViewById(R.id.image); 
     imageview.setBackgroundResource(R.drawable.icon); 
     ClipDrawable drawable = (ClipDrawable) imageview.getDrawable(); 
     if(drawable != null){ 
     drawable.setLevel(drawable.getLevel() + 1000); //Line number 21 
     } 
    } 
+0

http://developer.android.com/guide/topics/resources/drawable- resource.html#Clip查看这个链接的剪辑可绘制的例子我做的图像相同我没有给src而不是我给了可绘制的背景剪辑 –

+0

android:background =“@ drawable/clip”你有没有设置? –

+0

是的,你是正确的 –

0

如果您可以使用视图的id成员变量,这是一个简单的方法:只需使用v.setId()存储R.drawable标识。然后用v.getId()返回。

1

的答案都不到现在是正确的

这里的问题是,查看图像中的绘制是用android:background="@drawable/clip"连接,并使用检索ClipDrawable drawable = (ClipDrawable) imageview.getDrawable();

修正:

更改的ImageView XML

android:background="@drawable/clip" - >android:src="@drawable/clip"

OR

更改按钮回调代码

ClipDrawable drawable = (ClipDrawable) imageview.getDrawable(); - >ClipDrawable drawable = (ClipDrawable) imageview.getBackground();

不要改变这两个,否则问题将得到重新创建。改变任何一个。