1

在我的 Fragment 类中,我使用 XML 布局来扩展我的片段。布局是一个简单的线性布局,其中包含一个 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 事件正常工作吗?谢谢。

4

1 回答 1

2

好吧,我最终找到了我的解决方案。

首先我的代码非常混乱,因为我的 OnTouch 在 OnCreateView 中,然后我需要在我的类中添加“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 即可使其工作)

于 2012-05-28T10:09:13.127 回答