2013-02-04 1 views
3

Lorsque je fais l'exemple de dessablable de clip décrit dans this document ImageView.getDrawable renvoient toujours null. Quelqu'un peut-il m'aider?Get Dessiner à partir de la vue de l'image

Dans 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

partager votre logcat aussi votre morceau de code –

+0

@Dinesh vous voulez prendre l'instantané de l'image droite? –

+0

@UsmanKurd j'ai ajouté la sortie log-cat –

Répondre

2

Vous devez surcharger onWindowsFocusChanged()

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

la imageView n'a pas encore affiché correctement lorsque vous avez essayé d'obtenir sa valeur (image drawable). OnWindowsFocusChanged() informera l'utilisateur que la vue a déjà été chargée, c'est le moment où vous pouvez obtenir ses données.

+0

toujours obtenir null –

+2

J'ai mis à jour mon code ci-dessus, au lieu de 'imageview.getDrawable' changé en' image.getBackground() '. –

+0

merci @ SheSmile Il fonctionne très bien, j'ai ajouter un bouton dans le bouton onclick j'ai fais le drawable.setLevel –

1

Peut être vous obtiendrez null drawable si cette erreur occure.

Premier set tout image à ImageView ainsi vous obtiendrez 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 regarde ce lien pour l'exemple drawable clip je fais la même chose dans l'image je n'ai pas donné le src au lieu de j'ai donné le clip d'arrière-plan drawable –

+0

android: background = "@ drawable/clip" avez-vous mis cela? –

+0

oui vous avez raison –

0

Il s'agit d'une approche simple si vous pouvez utiliser la variable de membre id de la vue: il suffit de stocker l'ID R.drawable à l'aide de v.setId(). Puis récupérez-le avec v.getId().

1

Aucune des réponses jusqu'à présent est correct

Le problème ici est que dans l'image vue du drawable est attaché à l'aide android:background="@drawable/clip" et il est récupéré à l'aide ClipDrawable drawable = (ClipDrawable) imageview.getDrawable();

Corrections:

Modifier le imageview xml

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

OU

Modifiez le code de rappel bouton

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

Ne pas modifier à la fois, sinon le problème va se créer à nouveau. Changer quelqu'un.

Questions connexes