Skip to content

Instantly share code, notes, and snippets.

@kimukou
Created May 4, 2012 00:47
Show Gist options
  • Save kimukou/2590746 to your computer and use it in GitHub Desktop.
Save kimukou/2590746 to your computer and use it in GitHub Desktop.
GridView MultiTouch Test
/*
* ref
* http://www.mkyong.com/android/android-gridview-example/
* http://blog.fujiu.jp/2011/11/android.html
* http://d.hatena.ne.jp/xuwei/20120316/1331868246
* http://stackoverflow.com/questions/5730240/android-get-bounding-rectangle-of-a-view
*/
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.TextView;
public class GridViewActivity extends Activity {
private String TAG="GridViewActivity";
Activity activity;
GridView gridView;
TextView viewText;
static final String[] numbers = new String[] {
"A", "B", "C", "D", "E",
"F", "G", "H", "I", "J",
"K", "L", "M", "N", "O",
"P", "Q", "R", "S", "T",
"U", "V", "W", "X", "Y", "Z"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gview);
activity=this;
gridView = _findViewById(R.id.gridView1);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, numbers);
gridView.setAdapter(adapter);
viewText = _findViewById(R.id.viewText);
gridView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int gridView, long id) {
CharSequence tx = v==null ? "" : ((TextView) v).getText();
Log.v(TAG,"onItemClick:("+gridView + ","+ id + "," + tx + ")");
// Toast.makeText(activity,tx, Toast.LENGTH_SHORT).show();
if("".equals(tx))return;
viewText.setText(viewText.getText() + ","+tx);
}
});
gridView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event){
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
case MotionEvent.ACTION_POINTER_2_DOWN:
case MotionEvent.ACTION_POINTER_3_DOWN:
case 0x305:
case 0x405:
Log.v(TAG,"onTouch:ACTION_DOWN");
if(Build.VERSION.SDK_INT>=5){
int pointCount = event.getPointerCount();
for (int p = 0; p < pointCount; p++) {
int px=(int)event.getX(p);
int py=(int)event.getY(p);
clickItemView(px, py);
}
}
else{
int px=(int)event.getX();
int py=(int)event.getY();
clickItemView(px, py);
}
break;
}
// int pv = gridView.pointToPosition((int)event.getX(), (int)event.getY());
// long id = gridView.pointToRowId((int)event.getX(), (int)event.getY());
// View lv = gridView.getChildAt(pv);
// gridView.performItemClick(lv, pv, id);
return true;
}
});
}
private void clickItemView(int px, int py) {
int pv = gridView.pointToPosition(px,py);
long id = gridView.pointToRowId(px,py);
View lv = gridView.getChildAt(pv);
Log.v(TAG,"HIT:"+isViewContains(lv,px,py));
gridView.performItemClick(lv, pv, id);
}
private boolean isViewContains(View view, int rx, int ry) {
if(view==null)return false;
// int[] l = new int[2];
// view.getLocationOnScreen(l);
int x = view.getLeft();// l[0];
int y = view.getTop();//l[1];
int w = view.getWidth();
int h = view.getHeight();
Log.v(TAG,"(x,y,x+w,y+h,rx,ry)=("+x+","+y+","+(x+w)+","+(y+h)+","+rx+","+ry+")");
if (rx < x || rx > x + w || ry < y || ry > y + h) {
return false;
}
return true;
}
protected <T extends View> T _findViewById(final int id){
return (T)findViewById(id);
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<GridView
android:id="@+id/gridView1"
android:numColumns="auto_fit"
android:gravity="center"
android:columnWidth="50dp"
android:stretchMode="columnWidth"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/viewText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment