布局ClipDrawable无法正常工作

时间:2016-03-12 21:45:50

标签: java android layout

当我尝试通过代码设置ImageView的剪辑级别时,我的ClipDrawable抛出异常。 Logcat也位于 img.setLevel(...)行旁边的其他位置。我的代码有什么问题?

clip.xml

<?xml version="1.0" encoding="utf-8"?>
<clip
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/image"
    android:clipOrientation="horizontal"
    android:gravity="left" />

布局中的ImageView

<ImageView
            android:id="@+id/imageview1"
            android:background="@drawable/clip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"  />

代码(在setContentView(布局)之后)

ImageView img = (ImageView) findViewById(R.id.imageview1); 
        ClipDrawable drawable = (ClipDrawable) img.getDrawable();
        img.setLevel(drawable.getLevel() + 1000);

编辑:日志:

FATAL EXCEPTION: main
    java.lang.IllegalStateException: Could not execute method of the activity
            at android.view.View$1.onClick(View.java:2144)
            at android.view.View.performClick(View.java:2485)
            at android.view.View$PerformClick.run(View.java:9080)
            at android.os.Handler.handleCallback(Handler.java:587)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:130)
            at android.app.ActivityThread.main(ActivityThread.java:3687)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:507)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:507)
            at android.view.View$1.onClick(View.java:2139)
            at android.view.View.performClick(View.java:2485)
            at android.view.View$PerformClick.run(View.java:9080)
            at android.os.Handler.handleCallback(Handler.java:587)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:130)
            at android.app.ActivityThread.main(ActivityThread.java:3687)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:507)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at game.gam.Game.prepniNaLevelLayout(Game.java:356)
            at game.gam.Game.onImageButtonClick(Game.java:163)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:507)
            at android.view.View$1.onClick(View.java:2139)
            at android.view.View.performClick(View.java:2485)
            at android.view.View$PerformClick.run(View.java:9080)
            at android.os.Handler.handleCallback(Handler.java:587)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:130)
            at android.app.ActivityThread.main(ActivityThread.java:3687)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:507)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
            at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:0)

老问题,但发现它正在寻找解决不同问题的方法。 OP的问题是他们试图设置ImageView的背景而不是源。根据我的经验,image.getDrawable()正在寻找android:src标签,这就是OP获得null的原因。应该是:

<ImageView
        android:id="@+id/imageview1"
        android:src="@drawable/clip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"  />