2016-07-28 4 views
0

Пожалуйста, исправьте меня, где я ошибаюсь. Я пытаюсь показать некоторый эффект щелчка на щелчке изображения, но он бросает исключение nullpointer. где я ошибаюсь в этом коде? Он бросает исключения нулевого указателя на createAllImage()ImageView onClick effect во фрагменте

Фрагмент кода

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); 
    } 
} 

Мой файл макета

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

Возможно, fear.getDrawable() возвращает нуль или страх пустой .. Поделитесь StackTrace (LogCat), чтобы получить больше помощи – W0rmH0le

+0

fear.getDrawable() бросает пустой указатель, так что я изменил его на setColorFilter (0x77000000 , PorterDuff.Mode.SRC_ATOP); , Теперь он не показывает никаких исключений, но нет эффекта щелчка – FaisalAhmed

+0

У вашего ImageView есть какое-либо изображение? – W0rmH0le

ответ

1

Как уже упоминалось, fear.getDrawable() возвращается нуль.

Итак, мы имеем два решения .. нужно протестировать:

Solution 1

fear.getDrawable() равна нулю, так как вы установите изображение как android:background.

Я создал этот фиксированный основе в here и here

Таким образом, изменить ImageView следующим образом:

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

Решение 2

Если вы хотите сохранить android:background в ImageView Файл макета, попробуйте извлечь его следующим образом:

fear.getBackgroundDrawable(); 
+0

решение 2 работает ... Можете ли вы сказать мне, почему я должен делать fear.invalidate(); – FaisalAhmed

+1

Недействительный силу Представление для повторного рисования. Это происходит из-за того, что View не знает, что вы изменили способный к переносу. Вот почему вы должны «заставлять» – W0rmH0le

+0

решение, которое тоже отлично работает. Большое спасибо @Guilherme. Может у вас мало пользы, я не понял цветовой код 0x77000000. и что такое код для апельсина – FaisalAhmed

 Смежные вопросы

  • Нет связанных вопросов^_^