2016-07-28 10 views
0

Bitte korrigieren Sie mich, wo ich falsch liege. Ich versuche, einen Klick-Effekt auf den Bildanzeige-Klick zu zeigen, aber es wirft nullpointer aus. wo ich falsch in diesem Code bin? Es wird Null-Zeiger-Ausnahme bei createAllImage werfen()ImageView onClick-Effekt im Fragment

Fragment-Code

public class DuaFragment extends Fragment implements View.OnTouchListener { 

    ImageView fear; 

    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view= inflater.inflate(R.layout.dua_fragment,container,false); 
     return view; 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     createAllImage(); 
    } 

    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     switch (motionEvent.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       fear.getDrawable().setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP); 
       fear.invalidate(); 
       break; 
      case MotionEvent.ACTION_UP: 
       fear.getDrawable().clearColorFilter(); 
       fear.invalidate(); 
       break; 
     } 
     return true; 
    } 

    void createAllImage() { 
     fear=(ImageView)getView().findViewById(R.id.fear); 
     fear.setOnTouchListener(this); 
    } 
} 

Mein Layout-Datei

<ImageView 
    android:id="@+id/fear" 
    style="@style/icon" 
    android:background="@drawable/fear_96" /> 
+0

Wahrscheinlich fear.getDrawable() zurückkehrt null oder Angst ist null .. Teilen Sie die Stacktrace (logcat) mehr Hilfe – W0rmH0le

+0

fear.getDrawable() warf Null-Zeiger so habe ich es zu setColorFilter (0x77000000 zu bekommen , PorterDuff.Mode.SRC_ATOP); . Jetzt zeigt es keine Ausnahme, aber es gibt keinen Klick-Effekt – FaisalAhmed

+0

Ihr ImageView hat ein Bild? – W0rmH0le

Antwort

1

Wie Sie erwähnt haben, fear.getDrawable() zurückkehrt null.

So haben wir zwei Lösungen .. testen müssen:

Lösung 1

fear.getDrawable() null ist, weil Sie das Bild als android:background gesetzt.

Ich schuf dieses in here und here

So ändern Sie Ihre ImageView wie folgt basierend Korrigiert:

<ImageView 
    android:id="@+id/fear" 
    style="@style/icon" 
    android:src="@drawable/fear_96" 
    android:scaleType="fitXY"  /> 

Lösung 2

Wenn Sie android:background in Image behalten möchten Layoutdatei, versuchen Sie, das Zeichen wie folgt zu erhalten:

fear.getBackgroundDrawable(); 
+0

Lösung 2 funktioniert ... kannst du mir sagen, warum ich angst machen muss.invalidate(); – FaisalAhmed

+1

Invalize erzwingt, dass die Ansicht sich selbst neu zeichnet. Dies geschieht, weil die View nicht weiß, dass Sie das Zeichen geändert haben. Deshalb müssen Sie "zwingen" – W0rmH0le

+0

Lösung eine funktioniert auch gut. Vielen Dank @Guilherme. Kannst du einen Gefallen tun, habe ich Farbcode 0x77000000 nicht verstanden. und was ist Code für Orange – FaisalAhmed