单点触摸获得多个触摸事件

时间:2016-11-21 04:50:09

标签: java android multi-touch ontouch

实际上我有一个触摸列表视图的列表视图我会得到一个弹出窗口。但是当我触摸列表时,我会获得多个单触摸窗口。

的活动:

listView1.setAdapter(adapter);
adapter.notifyDataSetChanged();
listView1.setOnTouchListener(new AdapterView.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {

        dialog = new Dialog(PendingOrdersActitvity.this);
        dialog.setContentView(R.layout.itembumping);
        dialog.show();

        list1=(ListView )dialog.findViewById(R.id.list1);
        adapter = new CustomAdapter(PendingOrdersActitvity.this,itemsList1);
        list1.setAdapter(adapter);
        list1.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            // ....
        });
        return true;
        }
    });

4 个答案:

答案 0 :(得分:1)

OnTouchListener 界面中的

onTouch 方法会侦听许多不同的触摸事件操作。 所以你应该区分下面的事件动作类型。

listView1.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        switch (motionEvent.getAction()) {
            case MotionEvent.ACTION_UP:
                // Do something here for touch point up event

                return true;
            case MotionEvent.ACTION_DOWN:
                // Do something here for touch point down event

                return true;
        }

        return false;
    }
});

如果您只想在列表视图中选择一个项目,我建议您使用 setOnItemClickListener 而不是使用 setOnTouchListener

下面的代码描述了使用 setOnItemClickListener

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // Do something here!!
    }
});

答案 1 :(得分:0)

您可以使用setOnClickListener而不是TouchListener,在方法内添加对话框调用代码。

  

如果您想要多次触摸,可以在活动中使用此代码

private int mActivePointerId;
public boolean onTouchEvent(MotionEvent event) {
    ....
    // Get the pointer ID
    mActivePointerId = event.getPointerId(0);

    // ... Many touch events later...

    // Use the pointer ID to find the index of the active pointer
    // and fetch its position
    int pointerIndex = event.findPointerIndex(mActivePointerId);
    // Get the pointer's current position
    float x = event.getX(pointerIndex);
    float y = event.getY(pointerIndex);
}

答案 2 :(得分:0)

如果您使用onItemClickListener,则可以使用ListView。或者,如果您出于某种原因想要使用onTouchListener,则必须检查dialog是否尚未显示,如果没有,则显示dialog

if(!dialog.isShowing()){
    // Show the dialog
}

答案 3 :(得分:0)

Tnq每一个我都得到了解决方案

 listView1.setOnTouchListener(new AdapterView.OnTouchListener() {

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                       if(event.getAction() == MotionEvent.ACTION_UP){ // code

 return true; } return false;

}