2016-07-28 66 views
0

请纠正我错在哪里。我试图在imageview点击上显示点击效果,但它抛出了空指针异常。在这个代码中我错了?它是在createAllImage抛出空指针异常()ImageView onClick影响片段

片段代码

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()将返回null或恐惧是空..分享堆栈跟踪(logcat的),以获得更多的帮助 – W0rmH0le

+0

fear.getDrawable()被扔空指针,所以我把它改为setColorFilter(0x77000000 , PorterDuff.Mode.SRC_ATOP); 。现在它不显示任何异常,但没有点击效果 – FaisalAhmed

+0

您的ImageView有任何图像? – W0rmH0le

回答

1

至于你提到的fear.getDrawable()被返回null。

所以,我们有两个解决方案。需要进行测试:

解决方案1 ​​

fear.getDrawable()为null,因为你设置的图片作为android:background

我创造了这个固定的总部设在herehere

所以,如下更改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并不知道您更改了drawable。这就是为什么你必须“强制” – W0rmH0le

+0

解决方案之一也工作正常。非常感谢@Guilherme。你可以做一个忙,我没有理解色码0x77000000。什么是橙色代码 – FaisalAhmed

相关问题