グリッド レイアウトに 8 つのボタンがあるアプリケーションを開発しようとしています。必要なのは、一度に 2 つのボタンに触れたときに、親ビューに対するポインターの位置と、クリックされたビューの ID を取得する必要があることです。また、ボタン領域から出たらすぐにトリガーが必要です。
レイアウトの拡張を使用して、onInterceptTouchEvent をオーバーライドしてみました。次に、onTouchEvent で 2 本の指のポインターの位置を取得できます。しかし、どのボタンがクリックされたかを見つけることができず、指を動かしている間、私はそのボタン領域の外にいることを見つけることができません。
このタッチも初めてです。だからどんな助けでも本当に感謝します。これから私を助けてください..私は4日以来これに苦労しています。
public class KeypadEventHandler extends LinearLayout {
private Context mContext;
private TextView text1,edit;
int x1,y1,x2,y2;
private GridView mGView;
ImageView IV;
private static final String TAG=KeypadEventHandler.class.getSimpleName();
public KeypadEventHandler(Context context) {
super(context);
this.mContext=context;
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
layoutInflater.inflate(R.layout.activity_main, this);
text1=(TextView)findViewById(R.id.txtInput);
//b = (Button)findViewById(R.id.button1);
edit=(TextView)findViewById(R.id.txtMemory);
mGView=(GridView)findViewById(R.id.grdButtons);
mGView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Log.d(TAG,"on the click event");
// TODO Auto-generated method stub
IV=(ImageView)arg1;
}
});
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int pid1=0;
int action = event.getAction();
pid1 = action >> MotionEvent.ACTION_POINTER_ID_SHIFT;
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
// Log.d(TAG,"on the touch event");
//this is giving the x and y locations for the both fingers. but not able to find out which botton the finger touched.
//as the click listener is not invoking after implementing onInterceptTouchEvent
x1 = (int) event.getX(0);
y1 = (int) event.getY(0);
text1.setText("test ACTION DOWN " + " values = first finger X0: "+ x1 + " first finger Y0: " + y1);
x2 = (int) event.getX(1);
y2 = (int) event.getY(1);
edit.setText("test ACTION DOWN " + " values = second finger X0: "+ x2 + " first finger Y0: " + y2);
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}