Created
May 4, 2012 00:47
-
-
Save kimukou/2590746 to your computer and use it in GitHub Desktop.
GridView MultiTouch Test
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* 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); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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