在我的Fragment类中,我使用XML Layout扩展我的片段。布局是一个简单的LinearLayout,其中包含ImageView(轮子)。我想做我的ImageView上发生的触摸事件,这里是代码:
public class WheelFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment (Get the view from XML)
View view = inflater.inflate(R.layout.wheel_layout, container, false);
// Get the imageview of the wheel inside the view
ImageView wheelView = (ImageView) view.findViewById(R.id.wheel);
// Set onTouchListener
wheelView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
Log.d("down", "ACTION_DOWN");
}
if (event.getAction() == MotionEvent.ACTION_UP) {
Log.d("up", "ACTION_UP");
}
}
return true;
}
});
// Return the view
return view;
}
}
获取ACTION_DOWN事件没有问题,但我无法获得ACTION_UP事件。
我试图添加一个没有帮助的ACTION_CANCEL事件(我在论坛上看到它可以解决问题)。
我也尝试过返回值true / false。
有没有简单的方法让ACTION_UP事件有效? 感谢。
答案 0 :(得分:2)
好吧,我最终找到了解决办法。
首先我的代码非常混乱,因为我在OnCreateView中有OnTouch,然后我需要在我的班级添加“impements OnTouchListener”。
这是有效的代码:
public class WheelFragment extends Fragment implements OnTouchListener {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment (Get the view from XML)
View view = inflater.inflate(R.layout.wheel_layout, container, false);
// Get the imageview of the wheel inside the view
ImageView wheelView = (ImageView) view.findViewById(R.id.wheel);
// Set onTouchListener
wheelView.setOnTouchListener(this);
return view;
}
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
Log.d("down", "ACTION_DOWN");
}
if (event.getAction() == MotionEvent.ACTION_UP) {
Log.d("up", "ACTION_UP");
}
return true;
}
}
(事实上,如果我们在OnTouch中返回false,它就不起作用,但我不需要任何ACTION_CANCEL才能使它工作)