ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®çµ±äžæ§ãç¶æããªãããæ¢åã®ã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ãã³ãã«ããããŒã«ã«æ€çŽ¢ã®æ©èœãã©ã®ããã«è¿œå ãããã«ã€ããŠèª¬æããŸãã ããã§ã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã«å ããããå€æŽãšãããã®å€æŽã®çç±ãæ€èšããGestureOverlayViewãªããžã§ã¯ããActivityã¯ã©ã¹ã®èŠçŽ ã«è¿œå ããŠç¬èªã®ãžã§ã¹ãã£ãäœæããããšã«ã€ããŠèª¬æããŸãã åœç¶ãæ€çŽ¢ã«ã¯ç¹å¥ãªæ³šæãæãããŸãã

ã¬ã¹ãã©ã³æ€çŽ¢çµæç»é¢
æ€çŽ¢ã®è©³çŽ°
ã¢ããªã±ãŒã·ã§ã³ã«æ€çŽ¢æ©èœãè¿œå ããåã«ãããã€ãã®æ©èœãèæ ®ããããã€ãã®è³ªåã«çããå¿ èŠããããŸãã
æ£ç¢ºã«äœãæ¢ãã¹ãã§ããïŒ è£œåã®ããããŒãšãã®èª¬æãæ€çŽ¢ããŠããŠãŒã¶ãŒãçµæã®æãå®å šãªã»ãããååŸã§ããããã«ããŸããããããŒã ãã§ã¯ãã©ã®æçãåé¡ããæ£ç¢ºã«ç解ã§ãããšã¯éããªãããã§ãã ããã«ãé衚瀺ã®ã¡ã¿ããŒã¿ãæ€çŽ¢å¯Ÿè±¡ã®ã¢ã€ãã ã«è¿œå ã§ããŸãã
æ€çŽ¢çµæã衚瀺ããæ¹æ³ãããã«äœ¿çšããã¬ã€ã¢ãŠãã¯ïŒ ãªã¹ãïŒListViewãªããžã§ã¯ãïŒããå§ããã·ã§ããã³ã°ã«ãŒããšåãã¹ã¿ã€ã«ã§äœæããŸããã ãããããã®ãããªãã¬ãŒã³ããŒã·ã§ã³ã§ã¯ãæçã¯ç¹ã«é åçã«èŠããŸãã-ãã¹ãŠã®çç±ã¯ãåçã®ãµã€ãºãå°ããããããšã§ãã ãªã¹ãå ã®ç»åã®ãµã€ãºã倧ãããããšãããŒãžã®ã¹ããŒã¹ãå°ããããŠçµæã衚瀺ã§ããªãããšãããããŸããã ãã®çµæãæ€çŽ¢çµæãã°ãªããïŒGridViewèŠçŽ ïŒã«é 眮ããã¬ã¹ãã©ã³ã¡ãã¥ãŒã®äž»èŠéšåã§è¡ãã®ãšåãããšãè¡ãããšã«ããŸããããéžæããæçã«é¢ãã詳现ãå«ã倧ããªãããã¯ã暪ã«é 眮ãã代ããã«ãç»é¢å šäœã«äžé£ã®è£œåãé 眮ããŸããã ããã¯ãç¹ã«ãæ€çŽ¢çµæã®ããããŒãžãšéåžžã®ã¡ãã¥ãŒç»é¢ããã°ããåºå¥ããã®ã«åœ¹ç«ã¡ãŸãã æçã®è©³çŽ°ã衚瀺ããã«ã¯ããŠãŒã¶ãŒã¯æ€çŽ¢çµæããŒãžã§èªåã®åçãã¿ããããå¿ èŠããããŸãã ããã«å¿ããŠãããŒãžã®äžã«ãã€ã¢ãã°ããã¯ã¹ïŒDialogFragmentãªããžã§ã¯ãïŒã衚瀺ãããŸã;äžã®å³ã®ããããã«è¡šç€ºãããŸãã ããã«ããããŠãŒã¶ãŒã¯ãã€ã¢ãã°ããã¯ã¹ã®å€åŽã®ã¹ããŒã¹ãã¿ããããã ãã§ãæ€çŽ¢ããŒãžã«ãã°ããæ»ããä»ã®æçã®é²èŠ§ãç¶ããããšãã§ããŸãã ãŠãŒã¶ãŒã¯å¿ èŠãªãã®ãã§ããã ãæ©ãèŠã€ãããã®ã§ãçæ³çã«ã¯ãæ€çŽ¢ã¯é 延ãªãã»ãŒç¬æã«å®è¡ããå¿ èŠããããŸãã ãããªããã°ã圌ãã¯æããã®ãèŠã€ããããšãã§ããªãããçµæãåŸ ã€ã®ã«é£œã飜ãããŠãäœãæ¢ããŠã¢ããªã±ãŒã·ã§ã³ãé¢ããŸããã
æ©å¯ãŠãŒã¶ãŒããŒã¿ã®åŠçæ¹æ³ 以åã«å ¥åããæ€çŽ¢ã¯ãšãªã«åºã¥ããŠãã³ããæäŸããæ€çŽ¢ã·ã¹ãã ããŸãã¯ãŠãŒã¶ãŒãèªåã«é¢ãã詳现æ å ±ãå ¥åããå¿ èŠãããæ€çŽ¢ãäœæã§ããŸãã ããã«ãããä»ã®äººããŠãŒã¶ãŒãæ¢ããŠãããã®ãæ£ç¢ºã«èŠãããšãã§ããããå ¥åãããå人ããŒã¿ãã©ãã«éä¿¡ããããã«ã€ããŠã®çåãçããŸãã ç§ãã¡ã®å Žåãã¬ã¹ãã©ã³ã®ã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠè©±ããŠããã®ã§ããŠãŒã¶ãŒããã§ã³ã¬ãŒãã±ãŒãã奜ãã ãšèª°ããèŠã€ããŠããæªãããšã¯èµ·ãããŸããã ãã ãããã©ã€ãã·ãŒã«æã泚æãæãå¿ èŠããããããžã§ã¯ãããããŸãã ãã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããŠãŒã¶ãŒã¯èªåã«é¢ããæ å ±ãå ¥åããå¿ èŠããªããæ€çŽ¢ã¯ãšãªã¯ãã°ã«èšé²ãããããŠãŒã¶ãŒã®å±¥æŽã¯ä¿æãããŸããã
ã¬ã¹ãã©ã³ã¢ããªã§æ€çŽ¢
ã¬ã¹ãã©ã³ã¢ããªã±ãŒã·ã§ã³ã§æ€çŽ¢ãå®è£ ããæåã®ã¹ãããã¯ãããŒã¿ããŒã¹ã¯ã©ã¹ãäœãçŽããããã«ã¡ãœãããè¿œå ããŠãæ€çŽ¢çµæãå«ãæ°ããããŒãã«ãäœæããããšã§ãã ããŒãã«ã¯ãç»é¢ã«æ å ±ã衚瀺ããããã«äœ¿çšãããŸãã ãã®ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããããŒã¿ããŒã¹ã®è©³çŽ°ã«ã€ããŠã¯ã ãã¡ããã芧ãã ãã ã ããŒã¿ããŒã¹æ€çŽ¢ã¯ãSQLiteã¯ãšãªã䜿çšããŠç°¡åã«å®è£ ã§ããŸãã å®éãæ°è¡ã®ã³ãŒããå¿ èŠã§ãã ããã§ã¯ããŠãŒã¶ãŒãå ¥åããæ€çŽ¢ã¯ãšãªãå«ããã¹ãŠã®è£œåã®ååãšèª¬æã§æ€çŽ¢ãå®è¡ããŸãã æ€çŽ¢çµæãšããŠãããŒã¿ããŒã¹ã®ãã¹ãŠã®åãè¿ãããŸãããã®æ å ±ã¯ããŠãŒã¶ãŒãã¿ããããç»åã®è©³çŽ°ã衚瀺ããããã«åŸã§å¿ èŠã«ãªãããã§ãã ããŒã¿ããŒã¹ãéåžžã«å€§ããå Žåãæ€çŽ¢ã«ããªãã®æéããããå¯èœæ§ããããããã¢ããªã±ãŒã·ã§ã³ãåäœããŠããããšããŠãŒã¶ãŒã確èªã§ããããã«ãé²è¡ç¶æ³ããŒãŸãã¯å転ã€ã³ãžã±ãŒã¿ãŒã衚瀺ããããšãæ€èšããŠãã ããã ããŒã¿ããŒã¹æ€çŽ¢ãå®è¡ããæ¹æ³ã次ã«ç€ºããŸãã
/** * , (searchTerm) */ public Cursor searchMenuItems(String searchTerm) { SQLiteDatabase db = getReadableDatabase(); SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); qb.setTables(TABLES.MENU); Cursor c = qb.query(db, null, "("+MenuColumns.NAME+" LIKE '%"+searchTerm+"%') " + "OR ("+MenuColumns.DESCRIPTION+" LIKE '%" + searchTerm+"%')", null, null, null, null); return c; }
次ã«ãã¡ã€ã³ã¢ã¯ãã£ããã£ã調æŽããå¿ èŠããããŸããActionBarã«æ€çŽ¢ããŒãå«ããŸãã ActionBarã®ã«ã¹ã¿ãã€ãºã®è©³çŽ°ã«ã€ããŠã¯ã ãã®èšäºãåç §ããŠãã ããã æ€çŽ¢æ©èœã¯ãã¢ããªã±ãŒã·ã§ã³å ã«å®å šã«å®è£ ãããŸãã æ€çŽ¢ã«åå ããããã«ããã€ã¹ã«ä»ã®ããã°ã©ã ãã€ã³ã¹ããŒã«ããå¿ èŠã¯ãããŸãããæ€çŽ¢ãªã¯ãšã¹ããå€éšã¢ããªã±ãŒã·ã§ã³ã«éä¿¡ããå¿ èŠã¯ãããŸããã
ãã®æååå€æ°ãMainActivityã¯ã©ã¹ã«è¿œå ããŸãã ããã䜿çšããŠãã¯ãšãªæååãæ€çŽ¢ã€ã³ãã³ãã«éä¿¡ããŸãã ããã¯ãIntentã¯ã©ã¹ãªããžã§ã¯ãã«è¿œå ã®ããŒã¿ãè¿œå ããããã®ã¯ã©ã¹å€æ°ã§ãã
/* */ public final static String SEARCH_MESSAGE= "com.example.restaurant.MESSAGE";
次ã«ãMainActivityã¯ã©ã¹ã®onCreateOptionsMenuã¡ãœãããæŽæ°ããŸãã ActionBarãåæåããã³ãŒããè¿œå ããŸãã
/** * action menu ActionBar */ public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.action_bar, menu); // MenuItem searchItem = menu.findItem(R.id.action_search); SearchView mSearchView = (SearchView) searchItem.getActionView(); searchItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); // mSearchView.setOnQueryTextListener(new OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { // intent Intent searchIntent = new Intent(MainActivity.this, SearchResultsActivity.class); searchIntent.putExtra(SEARCH_MESSAGE, query); startActivity(searchIntent); return false; } @Override public boolean onQueryTextChange(String query) { // return true; } }); return super.onCreateOptionsMenu(menu); }
ããã§ãSearchResultActivityã¯ã©ã¹ãè¿œå ããŸãã
public class SearchResultsActivity extends Activity{ TextView mQueryText; GridView searchListResults; SearchAdapter adapter; Vector<com.example.restaurant.MenuFactory.MenuItem> searchList; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search_query_grid_results); mQueryText = (TextView) findViewById(R.id.txt_query); // GridView searchListResults = (GridView)findViewById(R.id.search_results); searchList= new Vector<com.example.restaurant.MenuFactory.MenuItem>(); // final Intent queryIntent = getIntent(); doSearchQuery(queryIntent); adapter= new SearchAdapter(this,searchList); searchListResults.setAdapter(adapter); // GridView searchListResults.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View v, int position, long id){ FragmentTransaction ft = getFragmentManager().beginTransaction(); Fragment prev = getFragmentManager().findFragmentByTag("dialog"); if (prev != null) { ft.remove(prev); } ft.addToBackStack(null); DialogFragment newFragment = SearchResultsDialogFragment.newInstance(searchList.elementAt(position)); newFragment.show(ft, "dialog"); } }); }
ãªã¹ãã®äœæäžã«ãæ€çŽ¢ã®çµæãšããŠäœãèŠã€ãããªãã£ããšãã«ãªãã·ã§ã³ãåŠçããŠããŸãã ã€ãŸããæ€çŽ¢ã§çµæãè¿ãããªãã£ãå ŽåããŠãŒã¶ãŒã«ãã€ã¢ãã°ããã¯ã¹ã衚瀺ããäœãèµ·ãã£ãããå ±åããçµæã衚瀺ããäºå®ã®ã¢ã¯ãã£ããã£ãéããŸãã ãã®çµæããŠãŒã¶ãŒã«ã¯ç©ºçœããŒãžã衚瀺ãããŸããã åãSearchResultActivityã¯ã©ã¹ã§ãããè¡ããŸãããã®ç¶ç¶ã以äžã«ç€ºããŸãã
/** * . */ private void doSearchQuery(final Intent queryIntent) { // String message= queryIntent.getStringExtra(MainActivity.SEARCH_MESSAGE); // mQueryText.setText(message); RestaurantDatabase dB= new RestaurantDatabase(this); MenuFactory mMF= MenuFactory.getInstance(); Cursor c= dB.searchMenuItems(message); Set<String> categories = new HashSet<String>(); while (c.moveToNext()) { String category = c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.CATEGORY)); categories.add(category); // MenuItem item= mMF.new MenuItem(); item.setCategory(category); item.setName(c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.NAME))); item.setDescription(c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.DESCRIPTION))); item.setNutrition(c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.NUTRITION))); item.setPrice(c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.PRICE))); item.setImageName(c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.IMAGENAME))); searchList.add(item); } c.close(); // , if(searchList.size()==0){ Intent intent = new Intent(SearchResultsActivity.this, OrderViewDialogue.class); intent.putExtra(OrderViewActivity.DIALOGUE_MESSAGE, "Sorry, no matching items found."); startActivity(intent); SearchResultsActivity.this.finish(); } }
次ã«ãGridViewèŠçŽ ã®ã¢ããã¿ãŒã«ã€ããŠèª¬æããŸãã ã¡ã€ã³ã¡ãã¥ãŒã®åæ§ã®ã³ãŒãã«åºã¥ããŠæ§ç¯ãããã€ããŒãªç·šéãè¡ããŸããã ããã«ãæ¢åã®ã¬ã€ã¢ãŠããã¡ã€ã«ãå€æŽã§ããŸãã äžè²«ããå€èŠ³ã®ã¢ããªã±ãŒã·ã§ã³ç»é¢ãæ§ç¯ããããšã¯ãã³ãŒããåå©çšããå©ç¹ã®1ã€ã§ããããã¹ãŠã®ç»é¢ããŒãããäœæããå¿ èŠããªãããšãè£å®ããŸãã äžã§ãæ°ã¥ããããããŸããããåœåã¯ãã¹ã±ããçšã«äœæãããããããã§ãé©åãªOrderViewDialogueã¯ã©ã¹ãåå©çšããŸããã ã³ãŒãã®ç¶ãã¯æ¬¡ã®ãšããã§ãã
/** * SearchAdapter GridView . view_grid_item, , . */ class SearchAdapter extends BaseAdapter { private Vector<com.example.restaurant.MenuFactory.MenuItem> mFoundList; private LayoutInflater inflater; public SearchAdapter(Context c, Vector<com.example.restaurant.MenuFactory.MenuItem> list) { mFoundList= list; inflater = LayoutInflater.from(c); } public int getCount() { return mFoundList.size(); } public Object getItem(int position) { return mFoundList.get(position); } public long getItemId(int position) { return 0; } // ItemView , public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; ImageView picture; TextView name; TextView price; if(v == null) { v = inflater.inflate(R.layout.view_grid_item, parent, false); v.setTag(R.id.picture, v.findViewById(R.id.picture)); v.setTag(R.id.grid_name, v.findViewById(R.id.grid_name)); v.setTag(R.id.grid_price, v.findViewById(R.id.grid_price)); } picture= (ImageView) v.getTag(R.id.picture); name= (TextView) v.getTag(R.id.grid_name); price= (TextView) v.getTag(R.id.grid_price); final MenuItem foundItem = (MenuItem) mFoundList.get(position); InputStream inputStream = null; AssetManager assetManager = null; try { assetManager = getAssets(); inputStream = assetManager.open(foundItem.imageName); picture.setImageBitmap(BitmapFactory.decodeStream(inputStream)); } catch (Exception e) { Log.d("ActionBarLog", e.getMessage()); } finally { } name.setText(foundItem.name); price.setText(foundItem.price); return v; } } }
æ€èšãã䟡å€ããããã1ã€ã®è©³çŽ°ã¯ãã€ã³ã¿ãŒãã§ã€ã¹ã®ããŒãã¬ãŒããŸãã¯ã©ã³ãã¹ã±ãŒãããŒãžã§ã³ã®äœ¿çšã§ãã 以äžã¯ãres / layout-landãã©ã«ããŒã«ãããã€ã³ã¿ãŒãã§ãŒã¹ã®ã©ã³ãã¹ã±ãŒãããŒãžã§ã³ãèšå®ããsearch_query_grid_results.xmlãã¡ã€ã«ã®ã³ãŒãã§ãã åæ°ïŒnumColumnsïŒã¯4ã«èšå®ãããŸããã€ã³ã¿ãŒãã§ã€ã¹ã®çžŠåãã®ãã¡ã€ã«ãšã»ãŒåããã¡ã€ã«ãres / layout-portãã©ã«ããŒã«ãããŸãã ã©ã³ãã¹ã±ãŒãããŒãžã§ã³ãšã¯ãèŠçŽ ã2åã«é 眮ãããŠããç¹ã®ã¿ãç°ãªããŸãã
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="5dp" android:paddingRight="5dp" android:paddingBottom="5dp" android:paddingTop="5dp" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" style="@style/FragmentTitle" android:text="Results For: " /> <TextView android:id="@+id/txt_query" android:layout_width="wrap_content" android:layout_height="wrap_content" style="@style/OrderTitle"/> </LinearLayout> <GridView android:id="@+id/search_results" android:layout_width="fill_parent" android:layout_height="0dp" android:paddingTop="10dp" android:numColumns="4" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:layout_weight="1" android:stretchMode="columnWidth" android:gravity="center"/> </LinearLayout>
æ€çŽ¢çµæç»é¢ã¯æ¬¡ã®ããã«ãªããŸãããã®äžã«ããŠãŒã¶ãŒãã¿ããããç»åã®ç¿ã«é¢ãã詳现ã瀺ããã€ã¢ãã°ããã¯ã¹ãéããŸãã

æ€çŽ¢ç»é¢ãšæçã®è©³çŽ°ãŠã£ã³ããŠ
ãžã§ã¹ãã£ãŒåŠç
æ€çŽ¢çµæã§ãŠã£ã³ããŠãçµäºããã«ã¯ãã¡ã€ã³ã¡ãã¥ãŒã§ä»ã®ããŒãžã衚瀺ãããšããšåãããã«ãé©åãªãžã§ã¹ãã£ãŒã§å·ŠãŸãã¯å³ã«ã¹ã¯ã€ãããŠç§»åããŸãã GestureDetectorã¯ã©ã¹ã¯ãªã¹ãïŒListViewïŒã§ã¯ããŸãæ©èœããŸãããããŒãã«ïŒGridViewïŒã§ã¯ããŸãæ©èœããŸããã ãããã£ãŠãGestureOverlayViewã®äœ¿çšã«åãæ¿ããå¿ èŠããããŸãã
æåã«ãGestureBuilderã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠãžã§ã¹ãã£ã©ã€ãã©ãªãäœæããå¿ èŠããããŸããããã¯ãAndroid SDKã«ä»å±ã®ãµã³ãã«ã®äžã«ãããŸãã ç¹ã«ãå¿ èŠãªã®ã¯android \ sdk \ samples \ android-23 \ legacy \ GestureBuilderã«ãããŸãã
ã¢ããªã±ãŒã·ã§ã³ã䜿çšããã«ã¯ãããã€ã¹ã§ã³ã³ãã€ã«ããŠå®è¡ããããã䜿çšããŠãžã§ã¹ãã£ã®ååãšæ§æãæå®ããå¿ èŠããããŸãã å¿ èŠãªãã¹ãŠã®ãžã§ã¹ãã£ãŒãè¿œå ããåŸïŒãã®å Žåãå·Šã«ã¹ã¯ã€ããå·Šã«ã¹ã¯ã€ããå³ã«ã¹ã¯ã€ããå³ã«ã¹ã¯ã€ãïŒãããã€ã¹ããããžã§ã¹ãã£ãŒããã¡ã€ã«ãã³ããŒããres / rawãã©ã«ããŒã«é 眮ããå¿ èŠããããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ããã®ãã¡ã€ã«ã®æ£ç¢ºãªå ŽæãæããŠãããŸãããã®å ŽåãUSBçµç±ã§ããã€ã¹ãPCã«æ¥ç¶ããã«ãŒããã£ã¬ã¯ããªãèŠãã ãã§ååã§ãã

ãžã§ã¹ãã£ãŒãã«ããŒã¢ããª
ãžã§ã¹ãã£ãã¡ã€ã«ãé©åãªå Žæã«ã³ããŒããããGestureOverlayViewã§åäœããããã«å€æ°å®£èšãè¿œå ããŠSearhcResultActivityã¯ã©ã¹ãæŽæ°ããå¿ èŠããããŸãã
GestureLibrary gestureLibrary; GestureOverlayView gestureOverlayView;
onCreateã¡ãœããã§ã¯ãã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ãåæåããã©ã€ãã©ãªãããŒãããŠãªã¹ããŒãæ§æããå¿ èŠããããŸãããªã¹ããŒã¯ããŠãŒã¶ãŒãå®è¡ãããžã§ã¹ãã£ãŒã«å¿ããŠããã°ã©ã ã®ã¢ã¯ã·ã§ã³ã決å®ããŸãã ãã®ã¡ã«ããºã ã®æäœãæ£åžžã«æ©èœãããã«ã¯ããžã§ã¹ãã£ãŒã©ã€ãã©ãªã«èšé²ãããŠããã®ãšåãååãã³ãŒãã§äœ¿çšãããŠããããšã確èªããå¿ èŠããããŸãã
ã¢ãã¡ãŒã·ã§ã³ãšããŠãoverridePendingTransitionã䜿çšããããšã«ããŸããã çä¿¡ã¢ãã¡ãŒã·ã§ã³ã«ã¯ãå€0ã䜿çšãããŸããããã¯ãã¢ãã¡ãŒã·ã§ã³ããªãããšãæå³ããŸãã 空ã®xmlã¢ãã¡ãŒã·ã§ã³ãã¡ã€ã«ãäœæããŠäœ¿çšããããšãã§ããŸãããããã«ããã·ã¹ãã ã¯ãæèãã«å€ãã®æéãè²»ãããéä¿¡ã¢ãã¡ãŒã·ã§ã³ãéåžžã«éãå®è¡ãããŸãã
gestureOverlayView = (GestureOverlayView)findViewById(R.id.gestures); // gestureLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures); gestureLibrary.load(); gestureOverlayView.addOnGesturePerformedListener(new OnGesturePerformedListener(){ @Override public void onGesturePerformed(GestureOverlayView view, Gesture gesture) { ArrayList<Prediction> prediction = gestureLibrary.recognize(gesture); if(prediction.size() > 0){ String action= prediction.get(0).name; // "left swipe" "right swipe" if("left swipe".equals(action)){ // SearchResultsActivity.this.finish(); overridePendingTransition(0, R.anim.move_left); } else if("right swipe".equals(action)){ // SearchResultsActivity.this.finish(); overridePendingTransition(0, R.anim.move_right); } } }}); // « » , , gestureOverlayView.setGestureVisible(false);
以äžã¯ãå·Šã·ããã¢ãã¡ãŒã·ã§ã³ãã¡ã€ã«move_left.xmlã®ã³ãŒãã§ãã å³ã·ããã¢ãã¡ãŒã·ã§ã³ãè¡ããã¡ã€ã«move_right.xmlã¯ãtoXDeltaã®å€ãè² ã§ãªãããšãé€ããŠããŸã£ããåãã«èŠããŸãã
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500" android:fromXDelta="0" android:toXDelta="-100%" android:interpolator="@android:anim/decelerate_interpolator" />
GrivViewãGestureOverlayViewå ã«ããå ŽåãLinearLayoutã®ããã«æ¡åŒµãã代ããã«æå®ããã0dpã䜿çšãããããGrivViewã¯0dpã«çããlayout_heightãã©ã¡ãŒã¿ãŒãæã€ããšãã§ããªãããšã«æ³šæããŠãã ããã ãã®èŠä»¶ãæºããããã«ããã®å Žåãlayout_heightãã©ã¡ãŒã¿ãŒã¯fill_parentã«èšå®ãããŸããã ããã«ããžã§ã¹ãã£ã衚瀺ããå¿ èŠããé 延ãå¿ èŠãããŸãããããã¯ããžã§ã¹ãã£ã©ã€ã³ãç»é¢ããã¹ã ãŒãºã«æ¶ãããšããäºå®ã«èµ·å ããŸãã ããžã§ã¹ãã£ã©ã€ã³ãã¯ãã§ã«ééçã§ãããäœåãªé 延ã¯å¿ èŠãããŸããã ãããã£ãŠãfadeOffsetããã³fadeDurationã0ã«èšå®ããŸãã以äžã¯ãGridViewãšGestureOverlayViewã®é¢ä¿ãå®çŸ©ããæŽæ°ãããxmlã³ãŒãã§ãã
<android.gesture.GestureOverlayView android:id="@+id/gestures" android:layout_width="fill_parent" android:layout_height="fill_parent" android:fadeOffset="0" android:fadeDuration="0" android:eventsInterceptionEnabled="true"> <GridView android:id="@+id/search_results" android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingTop="10dp" android:numColumns="4" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:layout_weight="1" android:stretchMode="columnWidth" android:gravity="center"/> </android.gesture.GestureOverlayView>
çµè«
Androidã¢ããªã±ãŒã·ã§ã³çšã®ããŒã«ã«æ€çŽ¢ã·ã¹ãã ãèšèšãããšãã«è¡ãå¿ èŠã®ããäžé£ã®æ±ºå®ãæ€èšããŸããã ããã«ãããã€ãã®æœåšçãªåé¡ãããã³ããããåé¿ããæ¹æ³ã«ã€ããŠè©±ããã³ãŒããšxml-markupã®äŸã瀺ããŸããã ããã§ãæ€çŽ¢æ©èœãç¬èªã®ã¢ããªã±ãŒã·ã§ã³ã«ããŸãçµã¿èŸŒãããšãã§ããåæã«æ€çŽ¢ãæ©èœããã ãã§ãªãããŠãŒã¶ãŒã®èŠä»¶ãèæ ®ã«å ¥ããããšãã§ããŸãã ãããŠããã¯ã圌ããééããªãå¿ èŠãªãã®ãèŠã€ããããšãæå³ããŸãã