Android的多点触控工作按钮Android的多点触控工作按钮(Android work mult

2019-05-12 04:11发布

嗨,我想创建2个按钮,我想多点触控?

我tryed做,但在网上没有例子..

所以,如果你有一个可以大家分享或者你可以给我的意见? 我的代码是这样的,但不支持多点触控

 package multi.touch;

 import android.app.Activity;
 import android.os.Bundle;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.View.OnTouchListener;
 import android.widget.AbsoluteLayout.LayoutParams;
 import android.widget.Button;
 import android.widget.TextView;

 public class baslat extends Activity implements OnTouchListener  { 
 TextView yazi;
 TextView bir,iki;
 Button buton1,buton2;

 @Override public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);

 yazi=(TextView)findViewById(R.id.textView1);
 bir=(TextView)findViewById(R.id.textView2);
 iki=(TextView)findViewById(R.id.textView3);
 buton1=(Button)findViewById(R.id.button1);
 buton2=(Button)findViewById(R.id.button2);

 buton2.setOnTouchListener(this);

 buton1.setOnTouchListener(this);

 }
 @Override
 public boolean onTouchEvent(MotionEvent event) {
    yazi.setText(String.valueOf(event.getPointerCount()+"\n\n"));
            bir.setText(String.valueOf("Birinci "
 + (int)event.getX(0)+"\n\n"+(int)event.getY(0)));
        iki.setText(String.valueOf("Ikinci"+
 (int)event.getX(1)+"\n\n"+(int)event.getY(1)));
    //buton2.setLayoutParams(new
 LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,
 (int)event.getX(0),
 (int)event.getY(0)));      return
 super.onTouchEvent(event);
            } @Override public boolean onTouch(View v, MotionEvent event) {
    Button fds=(Button)v;


            return false; }


 }

Answer 1:

老问题,但我跑我的头撞墙这个问题,直到最后我只是对面传来设置

android:splitMotionEvents="true"

上被按压包含该按钮视图的布局图,其允许多个按钮,这是我发现可用在SDK演示下载ApiDemos挖



Answer 2:

在Android的UI框架,所有触摸事件,属于在触控起源观。 所以,如果你摸你的按钮,所有触摸事件,都通过该按钮,直到你抬起手指进行处理; 这包括多触摸其他触摸指针。 根据我的经验,实现跨越不同的视图对象(你的2个按键)多点触摸的唯一途径,是捕捉一个观点,即覆盖整个屏幕全触控事件,并委派自己的触摸事件。 这是一个工作位,但它可以做到的。

一个例子可以是包括填充在屏幕上,但不具有可绘制对象源的ImageView的(或它的完全透明)。 把这个在您的其他元素(或许还有一个FrameLayout里)的顶部,并在ImageView的的的onTouchEvent()方法,分析了触摸坐标,并通过触摸事件到正确的按钮。 这得到相当复杂与多点触摸指针,但据我所知,这是通过触摸事件分离视图对象的唯一途径。



Answer 3:

我是这个问题有点无聊,我做了一个处理程序类与多点触控按键领先。 随意使用和/或更新。

 //CLASS TO HANDLE THE EVENT public class MultitouchButtonHandler { ArrayList<View> views_info = new ArrayList<View>(); public MultitouchButtonHandlerResult onTouchEvent(View v, MotionEvent ev) { //GET EVENT INFO final int action = ev.getAction(); int action_masked = action & MotionEvent.ACTION_MASK; if(action_masked==MotionEvent.ACTION_MOVE){ return null; } //GET ABSOLUTE SIZE AND CHECK IF THIS ANY VIEW ATTACHED TO THIS POSITION final int original_location[] = { 0, 0 }; v.getLocationOnScreen(original_location); final int actionPointerIndex = ev.getActionIndex(); float rawX = (int) ev.getX(actionPointerIndex) + original_location[0]; float rawY = (int) ev.getY(actionPointerIndex) + original_location[1]; View eventView = getViewByLocation((int)rawX, (int)rawY); if(eventView==null) return null; MultitouchButtonHandlerResult result = new MultitouchButtonHandlerResult(); result.view = eventView; //CHECK WHAT KIND OF EVENT HAPPENED switch (action_masked) { case MotionEvent.ACTION_DOWN: { result.event_type = MotionEvent.ACTION_DOWN; return result; } case MotionEvent.ACTION_UP: { result.event_type = MotionEvent.ACTION_UP; return result; } case MotionEvent.ACTION_CANCEL: { result.event_type = MotionEvent.ACTION_CANCEL; return result; } case MotionEvent.ACTION_POINTER_UP: { result.event_type = MotionEvent.ACTION_UP; return result; } case MotionEvent.ACTION_POINTER_DOWN: { result.event_type = MotionEvent.ACTION_DOWN; return result; } default: break; } return null; } public void addMultiTouchView(View v){ views_info.add(v);; } public void removeMultiTouchView(View v){ views_info.remove(v);; } public View getViewByLocation(int x, int y){ for(int key=0; key!= views_info.size(); key++){ View v = views_info.get(key); //GET BUTTON ABSOLUTE POSITION ON SCREEN int[] v_location = { 0, 0 }; v.getLocationOnScreen(v_location); //FIND THE BOUNDS Point min = new Point(v_location[0], v_location[1]); Point max = new Point(min.x + v.getWidth(), min.y + v.getHeight()); if(x>=min.x && x<=max.x && y>=min.y && y<=max.y){ //Log.d("mylog", "***Found a view: " + v.getId()); return v; } } //Log.d("mylog", "Searching: " + x +", " + y + " but not found!"); return null; } } 

 //CLASS TO FULLFILL WITH RESULT public class MultitouchButtonHandlerResult { public View view; public int event_type; } 

 //In your view private OnTouchListener listener_touch_button = new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { MultitouchButtonHandlerResult result=multitouch_handler.onTouchEvent(v, event); if(result==null) return true; switch(result.event_type){ case MotionEvent.ACTION_DOWN: Log.d("mylog", "DOWN"); break; case MotionEvent.ACTION_UP: Log.d("mylog", "UP"); break; case MotionEvent.ACTION_CANCEL: Log.d("mylog", "CANCEL"); break; } Log.d("mylog", "View ID: " + result.view.getId()); return false; } }; 



Answer 4:

你检查此链接 -

如何使用多点触控Android中2
http://www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2/1747

如何为多点触控代码



文章来源: Android work multitouch button