Android работает мультитач кнопка
Привет, я хочу создать 2 кнопки, и я хочу мультитач??
Я пытался сделать, но не пример в интернете..
Так что, если у вас есть один, вы можете поделиться или вы можете дать мне мнение?? мой код это, но не поддержка мультитач
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; }
}
4 ответа
Старый вопрос, но я с головой сталкивался с этой проблемой, пока наконец не наткнулся на настройку
android:splitMotionEvents="true"
на макете, который содержит виды кнопок, которые позволяют нажимать несколько кнопок, которые я нашел, копая в ApiDemos, которые доступны в загрузке демонстраций sdk
В структуре пользовательского интерфейса Android все сенсорные события принадлежат к представлению, из которого произошло прикосновение. Поэтому, если вы дотронетесь до своей кнопки, все сенсорные события будут обрабатываться через эту кнопку, пока вы не поднимите палец вверх; это включает в себя другие сенсорные указатели для мультитач. По моему опыту, единственный способ добиться мультитач для разных объектов View (ваших 2 кнопок) - это захватить все сенсорные события в одном View, охватывающем весь экран, и самостоятельно делегировать сенсорные события. Это немного работы, но это можно сделать.
Примером может быть включение ImageView, которое заполняет экран, но не имеет источника Drawable (или оно полностью прозрачно). Поместите это поверх других ваших элементов (возможно, с помощью FrameLayout) и в методе onTouchEvent() ImageView проанализируйте координаты касания и передайте событие касания до нужной кнопки. Это несколько усложняется с помощью нескольких сенсорных указателей, но, насколько я знаю, это единственный способ передать сенсорные события в отдельные объекты View.
Мне было немного скучно с этим предметом, и я сделал класс обработчика для управления с помощью кнопок мультитач. Не стесняйтесь использовать и / или обновлять это.
//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; } };
Вы проверили эту ссылку -
Как использовать Multi-touch в Android 2
http://www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2/1747