編輯:關於Android編程
1.回顧
上篇學習了 Android 系統服務的 10個實例 ,當然 還有更多的系統服務沒有使用;留下來的遺憾就是,昨晚沒有將demo下載地址分享出去;
2.重點
(1)OnTouchListener 實現 上下左右手勢識別
(2)OnTouchListener + SimpleOnGestureListener + GestureDetector 實現 上下左右 手勢識別
(3)GestureOverlayView + GestureLibrary + OnGesturePerformedListener 實現 自定義手勢識別
3. 效果圖
普通手勢識別: 自定義手勢識別:
4. 圖片准備
為了實現的效果更好一點,使用 ps 做了 9張 圖片 ,來作為響應 ,更直觀 的顯示;
(1)待機
(2)普通手勢判斷:上下左右
(3)自定義手勢判斷 :對號,錯號,圓,雷
5. OnTouchListener 實現 上下左右手勢識別
5.1 思路
(1) OnTouchListener 在前面使用過,在 做 圖片輪播(ViewFlipper) 的時候使用過 ;
(2)基本思路一樣,設置 OnTouchListener ,進行判斷 ;
5.2 實現
給圖片或者布局設置監聽即可;
/** * * 第一種方式: * 添加觸摸 事件監聽器 * @author yuan * */ class imgtestTouchListener implements OnTouchListener{ private int x=0; private int y=0; @Override public boolean onTouch(View v, MotionEvent event) { // 可以通過 x ,y 來判斷 滑動的手勢 //不過只可以判斷:上滑,下滑,左滑,右滑 switch (event.getAction()) { case MotionEvent.ACTION_DOWN: //手指按下的時候:初始化 x,y 值 x=(int) event.getX(); y=(int) event.getY(); break; case MotionEvent.ACTION_MOVE: //移動就不說了,因為在這裡判斷手勢,只和 按下的位置和 抬起來的位置 有關; break; case MotionEvent.ACTION_UP: /* * 手指抬起來觸發 ,所以判斷在這裡進行 * 1.獲得結束的x,y * 2.進行判斷 */ int upx=(int) event.getX(); int upy=(int) event.getY(); String result=drawTouch(upx,upy); //提醒 textView1.setText(result); break; } return true; } private String drawTouch(int upx,int upy){ String str=沒有滑動; //水平滑動 if(upx-x>100){ str=向右滑動; //改變圖片 img_test.setImageResource(R.drawable.icon_right); }else if(x-upx>100){ str=向左滑動; //改變圖片 img_test.setImageResource(R.drawable.icon_left); }else if(upy-y>100){ str=向下滑動; //改變圖片 img_test.setImageResource(R.drawable.icon_down); }else if(y-upy>100){ str=向上滑動; //改變圖片 img_test.setImageResource(R.drawable.icon_up); } return str; } }
6.1 思路
(1)和 使用 OnTouchListener 一樣,不過是將 MotionEvent 對象交給 GestureDeteCtor 對象 處理
(2)GestureDetector 實現的不僅僅 實現 上下左右的判斷,還有很多 這裡僅僅 重新了 onFling() 方法
6.2 實現
(1)聲明 並 實例化 GestureDetector
private GestureDetector gestureDetector;
(2)一定在 OnCreate 裡實例化 ,不然報 空指針 異常
//00.初始化 GestureDetector 對象 gestureDetector=new GestureDetector(MainActivity.this,new GestureDelectorSimlpeListener());
/** * 2.繼承 SimpleOnGestureListener * 重載 感興趣的 手勢 * @author yuan * */ class GestureDelectorSimlpeListener extends SimpleOnGestureListener{ @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { /* * 滑動 使用 onFling()方法 * 3.判斷 */ String result=drawTouch(e1.getX(),e1.getY(),e2.getX(),e2.getY()); textView1.setText(result); return true; } /** * 手勢判斷 * @param x * @param y * @param upx * @param upy * @return */ private String drawTouch(float x,float y,float upx,float upy){ String str=沒有滑動; //水平滑動 if(upx-x>100){ str=向右滑動; //改變圖片 img_test.setImageResource(R.drawable.icon_right); }else if(x-upx>100){ str=向左滑動; //改變圖片 img_test.setImageResource(R.drawable.icon_left); }else if(upy-y>100){ str=向下滑動; //改變圖片 img_test.setImageResource(R.drawable.icon_down); }else if(y-upy>100){ str=向上滑動; //改變圖片 img_test.setImageResource(R.drawable.icon_up); } return str; } }
/** * 第二種方式 * * 使用 GestureDetector 來進行操作 * */ class GestureOntouchListener implements OnTouchListener{ @Override public boolean onTouch(View v, MotionEvent event) { //1.獲得 motionEvent 對象 gestureDetector.onTouchEvent(event); return true; } }
2.4 APP執行代碼APP運行時可執行的代碼,主要有三部分:1) 虛擬機初始化時加載的系統jar包,主要包含framework.jar和libcore.jar,分別對應
Android開發通用的工具類在開發中有些代碼都是重復性的,如果能把這些代碼集中的分類提取出來(比如網絡連接、數據保存等),然後再以後寫帶碼中,直接把這些代碼復制過來,然
1、客戶端代碼 1.1第一個界面 public class MainActivity extends FragmentActivity { private ViewPa
主要思路是調用系統文件管理器或者其他媒體采集資源來獲取要上傳的文件,然後將文件的上傳進度實時展示到進度條中。主Activity復制代碼 代碼如下:package com.