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

问题描述 投票:-3回答:4

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

活动:

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;
        }
    });
java android multi-touch ontouch
4个回答
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!!
    }
});

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);
}

0
投票

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

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

0
投票

每一个我得到解决方案

 listView1.setOnTouchListener(new AdapterView.OnTouchListener() {

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

 return true; } return false;

}
© www.soinside.com 2019 - 2024. All rights reserved.