ACTION_UP问题

时间:2012-05-27 21:54:46

标签: android events touch action release

在我的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事件有效? 感谢。

1 个答案:

答案 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才能使它工作)