精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Android觸屏textview及listview對比驗證

移動開發 Android
Android系統提供了GestureDetector來方便手勢的判斷,即:在攔截函數中每次touchevent都把事件作為參數調用GestureDetector.onTouchEvent(),當有手勢被識別出后,就會通知調用者。本文將向各位介紹Android觸摸屏手機開發的textview及listview對比驗證。

觸摸屏做出動作已經成為主流手機的操作規范,但是你想過怎么開發觸摸屏手機的手勢操作嗎?本文將向各位介紹Android觸摸屏手機開發的textview及listview對比驗證。

View可以通過onTouchEvent收到觸摸屏幕事件

我們可以通過View.setOnTouchListener()設置事件監聽器

或者override onTouchEvent()來攔截這些事件

在攔截函數中判斷觸摸點的軌跡及運動速度就可以判斷出是什么手勢。

Android系統提供了GestureDetector來方便手勢的判斷,即:在攔截函數中每次touchevent都把事件作為參數調用GestureDetector.onTouchEvent(),當有手勢被識別出后,就會通知調用者。

為了能通知到調用者,GestureDetector在構造時要求傳入一個實現了OnGestureListener接口的對象,通過此對象就可以接收到各種手勢通知了。

首先,用textview來實驗:

用一個ViewFlipper放置兩個Textview,當手指在屏幕上左右移動時進行進行切換。

由于textview本身不會處理touchevent,而是會將其繼續上傳,所以textview布局時layout_width及layout_height沒有影響。

如果touch事件發生在textview上會繼續上傳到viewflipper;如果發生在viewflipper上那么就直接處理。

所以我們應該攔截發生在ViewFlipper上的touchEvent,并進行處理。

代碼如下,在onCreate中完成界面布局及事件攔截函數設置:

Java代碼

  1. //創建一個ViewFlipper    
  2.         mVf = new ViewFlipper(this);    
  3.         //ViewFlipper打開長點擊支持。如果不打開,無法收到長時間點擊,那么手勢判斷就無從進行。    
  4.         mVf.setLongClickable(true);    
  5.         //攔截ViewFlipper的touch事件,并使用GestureDetector.onTouchEvent來處理    
  6.         mVf.setOnTouchListener(new OnTouchListener() {              
  7.             @Override    
  8.             public boolean onTouch(View v, MotionEvent event) {    
  9.                 return mVfDetector.onTouchEvent(event);    
  10.             }    
  11.         });    
  12.             
  13.         //添加一個textview。textview不能setLongClickable(true),    
  14.         //如果設置了那么發生在textview上的touch事件就無法傳給viewflipper,    
  15.         //無法被手勢識別對象處理了。    
  16.         TextView tv = new TextView(this);    
  17.         tv.setText("TextView 1");    
  18.         tv.setBackgroundColor(0xffffffff); //設置一個白色背景,方便看到textview區域    
  19.         mVf.addView(tv,new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));    
  20.             
  21.         //再添加一個textview    
  22.         TextView tv2 = new TextView(this);    
  23.         tv2.setText("TextView 2");    
  24.         tv2.setBackgroundColor(0xffffffff);    
  25.         mVf.addView(tv2,new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));    
  26.                    
  27.         //將viewFlipper作為Activity的主view顯示    
  28.         setContentView(mVf);   

在監聽器中用到了GestureDetector對象,其是一個類成員對象,用如下代碼創建:

Java代碼

  1. private GestureDetector mVfDetector = new GestureDetector(new OnGestureListener() {    
  2.         //手指在屏幕上移動距離小于此值不會被認為是手勢    
  3.         private static final int SWIPE_MIN_DISTANCE = 120;    
  4.         //手指在屏幕上移動速度小于此值不會被認為手勢    
  5.         private static final int SWIPE_THRESHOLD_VELOCITY = 200;    
  6.             
  7.         //手勢識別函數,到此函數被系統回調時說明系統認為發生了手勢事件,    
  8.         //我們可以做進一步判定。    
  9.         @Override    
  10.         public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {    
  11.             //如果第1個坐標點大于第二個坐標點,說明是向左滑動    
  12.             //滑動距離以及滑動速度是額外判斷,可根據實際情況修改。    
  13.             if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE &&     
  14. Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {    
  15.                 //left    
  16.                 Log.i("GestureDemo", "ViewFlipper left");    
  17.                 mVf.showNext();    
  18.                 return true;    
  19.             }else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE &&     
  20. Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {    
  21.                 //right    
  22.                 Log.i("GestureDemo", "ViewFlipper right");    
  23.                 mVf.showPrevious();     
  24.                 return true;    
  25.             }    
  26.             return false;    
  27.         }    
  28.                 ... ...    
  29.                 ... ...    
  30.          });    
  31. }   

#p#

我們將前文中添加第二個textview的改為添加Listview,代碼如下:

Java代碼

  1.    
  2.  
  3. ListView lv = new ListView(this);    
  4. lv.setBackgroundColor(0xff808080);    
  5. final String[] items = {"one", "two", "three"};    
  6. lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items));    
  7. mVf.addView(lv,new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));    

執行ap,滑動屏幕切換到第二屏,可以看到第二屏被換成了一個ListView,并且沒有填充完整個屏幕,這時如果在底部非ListView區域向左滑動,仍然可以切換到***屏,但是在Listview區域滑動就沒有效果了,因為touch事件被Listview處理了,ViewFlipper無法收到touch事件也就無法進行手勢判斷。

我們給ListView也增加一個touch事件監聽器,代碼如下:

Java代碼

  1.    
  2.  
  3. lv.setOnTouchListener(new OnTouchListener() {               
  4.     @Override    
  5.     public boolean onTouch(View v, MotionEvent event) {    
  6.         return mVfDetector.onTouchEvent(event);    
  7.     }    
  8. });    

此時在ListView上滑動也能實現屏幕切換了。

我們再給Listview增加響應點擊事件的處理,代碼如下:

Java代碼

  1.    
  2.  
  3. lv.setOnItemClickListener(new OnItemClickListener() {    
  4.     @Override    
  5.     public void onItemClick(AdapterView> arg0, View arg1,     
  6.         int arg2, long arg3) {    
  7.         new AlertDialog.Builder(MainActivity.this)    
  8.             .setMessage(items[arg2])    
  9.             .create()    
  10.             .show();                    
  11.     }    
  12. });    

當點擊Listview的條目的時候,就會彈出窗口顯示點擊了哪一項,此時的代碼可參見附件1。

截止到此時,似乎Listview支持左右滑動的操作完成了,但實際上仍有兩個問題:

首先就是滑動時,Listview有時會有條目被高亮,這個問題倒還不是太嚴重。

再次就是ContextMenu每次滑動都會被激活,我們可以通過代碼驗證,創建ListView的代碼稍作修改:

Java代碼

  1.    
  2.  
  3. //使Listview長一些    
  4. final String[] items = {"one", "two", "three", "four", "five", "six", "sevent", "eight", "nine"};     
  5. registerForContextMenu(lv);    

另外Activity的代碼增加:

Java代碼

  1. @Override    
  2. public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {    
  3.         menu.add("Menu 1");    
  4.         menu.add("Menu 2");    
  5.         menu.add("Menu 3");    
  6.     super.onCreateContextMenu(menu, v, menuInfo);    
  7. }   

當我們在ListView的某一項上長按時就會彈出菜單,但是當滑動時,即使屏幕切換到了***屏,此菜單仍然會彈出。

為了解決上面的問題,我嘗試了以下辦法:

1.在ListView的touch事件監聽函數中始終返回true,吃掉所有事件,這樣的修改導致不能相應點擊,ListView不能上下滑動,此路不通。

2.在GestureDetector的fling函數中向ListView發送一個MotionEvent.ACTION_CANCEL事件,總是空指針異常,懷疑是因為touch事件沒有被ListView處理過,其內部成員狀態異常,于是我從ListView繼承實現了一個ListView,在onTouchEvent中呼叫super.onTouchEvent,但是發送MotionEvent.ACTION_CANCEL事件時仍然是空指針異常,再次失敗。

3.GestureDetector的onDown函數返回true,吃掉down事件,此時點擊時沒有高亮項了,切換時contextmenu也不被trigger了,但是長按也無法彈出contextmenu了。

為了能彈出contextMenu,那么就要在GestureDetector的onLongPress函數中調用ListView.showContextMenuForChild()來彈出菜單。

那么GestureDetector就與ViewFlipper的不通用了。

所以我重新由ListView繼承實現了一個類,這個類自身綁定了一個GestureDetector:

Java代碼

  1.    
  2.  
  3. @Override    
  4. public boolean onDown(MotionEvent e) {    
  5.     return true;    //吃掉Down事件    
  6. }    
  7. @Override    
  8. public void onLongPress(MotionEvent e) {        
  9.     System.out.println("Listview long press");    
  10.     int position = pointToPosition((int)e.getX(), (int)e.getY());                   
  11.     if( position != ListView.INVALID_POSITION) {    
  12.         View child = getChildAt(position - getFirstVisiblePosition());    
  13.         if(child != null) GestureListView.this.showContextMenuForChild(child);    
  14.     }    
  15. }    

另外為了能夠顯示contextmenu時在哪一項上激活的,在Activity增加函數:

Java代碼

  1. @Override    
  2. public boolean onContextItemSelected(MenuItem item) {    
  3.     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();    
  4.     System.out.println("View " + info.position + " context menu activited.");    
  5.     return super.onContextItemSelected(item);    
  6. }   

從LogCat即可看到打印輸出。

此時此ListView可以響應手勢、可以響應點擊、可以彈出菜單,基本的功能已經滿足,另外再微調一下ondown函數,當點擊時可以高亮一下。

 

【編輯推薦】

  1. Android開發:系統自動實現開機啟動
  2. Android開發:自由選擇TextView的文字
  3. Android開發:如何實現TCP和UDP傳輸
責任編輯:佚名 來源: javaeye
相關推薦

2014-04-29 13:58:11

OpenGL ESAndroid響應觸屏事件

2009-05-28 09:35:52

2014-02-10 09:30:14

Windows 8.1

2011-03-21 15:23:24

觸屏網頁設計

2011-07-28 10:26:18

2013-01-11 13:30:38

觸屏智能手機新聞閱讀

2013-05-16 15:08:33

2011-05-27 15:02:15

Android ListView

2013-04-07 10:09:00

Android開發TextView屬性

2009-11-04 08:56:03

Windows 7觸摸屏

2011-05-10 17:19:06

戴爾評測

2015-07-28 16:57:52

觸屏手機鍵盤功能機

2012-03-23 10:27:08

觸屏手機點擊區域

2011-04-29 14:24:48

戴爾Insprion

2012-02-29 14:32:18

LifeSize觸屏會議電話視頻會議

2011-06-08 14:26:21

OMSOphoneiPhone

2013-03-27 09:17:17

Android開發AndroidList

2011-06-03 10:48:23

Android ListView

2011-04-28 08:59:13

點贊
收藏

51CTO技術棧公眾號

欧美丰满少妇人妻精品| 在线视频亚洲自拍| 久久久黄色大片| 欧美日韩有码| 91精品福利在线一区二区三区| 高清无码一区二区在线观看吞精| 无码国产精品一区二区色情男同 | 五月天丁香激情| 精品国产午夜肉伦伦影院| 一本大道综合伊人精品热热| 中文字幕日韩精品久久| 天天射,天天干| 免费人成在线不卡| 97国产精品久久| 91n在线视频| 欧美一区自拍| 日韩一区和二区| 少妇性l交大片| 久久av色综合| 中文字幕一区二区三| 久久久久久久久久久一区| 91中文字幕在线视频| 亚洲欧美日韩精品一区二区 | 1024在线看片| 红杏aⅴ成人免费视频| 欧美日本免费一区二区三区| 中文字幕无码精品亚洲35| 欧美猛烈性xbxbxbxb| 91免费视频网| 国产日韩二区| a在线观看视频| 日本午夜一区二区| 欧美亚洲另类激情另类| 免看一级a毛片一片成人不卡| 精品国产不卡| 亚洲精品日韩丝袜精品| 永久av免费在线观看| 黄色精品视频网站| 在线这里只有精品| 国产福利视频在线播放| av电影院在线看| 一二三四区精品视频| 中文字幕欧美人与畜| av午夜在线| 中文字幕国产一区二区| 欧美一区二区三区精美影视 | 成年人视频在线免费看| 在线国产精品一区| 欧美激情欧美激情| 久久午夜无码鲁丝片| 91精品福利| 乱亲女秽乱长久久久| 一区二区三区四区五区| 手机在线一区二区三区| 日韩中文字幕第一页| 东京热无码av男人的天堂| 欧美日韩国产高清电影| 亚洲丝袜在线视频| 欧美黄色高清视频| 日韩免费在线| 久久精品夜夜夜夜夜久久| 成人一级黄色大片| 久久久9色精品国产一区二区三区| 亚洲性猛交xxxxwww| 精品人妻无码一区二区三区换脸| 在线一级成人| 国产亚洲精品日韩| 性少妇xx生活| 亚洲精品888| 久久久久国色av免费观看性色 | 色美美综合视频| www.日本xxxx| 国产一区2区在线观看| 日韩欧美色电影| 在线观看亚洲免费视频| 久久丝袜视频| 伊人久久大香线蕉av一区二区| 天天躁夜夜躁狠狠是什么心态| 精品国产日韩欧美| www.日韩免费| 久久av高潮av无码av喷吹| 一区在线免费观看| 日本精品视频在线| 亚洲在线视频播放| 国产大陆a不卡| 蜜桃av久久久亚洲精品| www在线播放| 亚洲精品一二三区| 北条麻妃在线视频观看| 日韩av首页| 欧美一区二区三区视频在线| 人妻无码中文久久久久专区| 日韩在线观看电影完整版高清免费悬疑悬疑 | 精品欧美激情在线观看| 蜜臀久久99精品久久久无需会员 | 成人好色电影| 一区二区三区日本| 苍井空浴缸大战猛男120分钟| 欧美天堂一区| 亚洲精品久久久久国产| 老司机福利在线观看| 激情自拍一区| 国产精品永久免费视频| 国产91久久久| 国产精品全国免费观看高清| 国产www免费| 日韩成人精品一区二区三区| 亚洲国产一区自拍| 国产精品视频一区二区在线观看| 亚洲国产欧美国产综合一区| 国产精品一区二区性色av| 少妇高潮一区二区三区69| 国产精品久久久久久一区二区三区 | 亚洲高清不卡在线观看| 日韩大片一区二区| 欧美大片网址| 久久久久久久影院| 在线免费看91| 国产亚洲综合在线| 99热在线这里只有精品| 8x国产一区二区三区精品推荐| 在线播放日韩专区| 毛片视频网站在线观看| 国产91精品久久久久久久网曝门| 亚洲7777| 希岛爱理一区二区三区av高清| 欧美变态口味重另类| 欧美特黄一级片| 天堂va蜜桃一区二区三区| 国产区一区二区三区| 日本大片在线播放| 91麻豆精品国产自产在线 | 午夜精品久久久久久久男人的天堂| 中文字幕一区2区3区| 久久综合视频网| 国产主播自拍av| 日韩精品一区二区三区中文| 久久精品视频导航| 一女二男一黄一片| 国产欧美视频一区二区三区| 女人另类性混交zo| 你懂的一区二区三区| 91精品国产电影| 人人妻人人澡人人爽久久av| 亚洲卡通欧美制服中文| 日本女人黄色片| 亚洲综合专区| 91香蕉国产在线观看| 免费黄色电影在线观看| 欧美精品久久久久久久久老牛影院| 中文字幕网站在线观看| 老牛嫩草一区二区三区日本 | 亚洲国产一区二区三区 | 26uuu成人网一区二区三区| 成人网站免费观看入口| 韩国精品福利一区二区三区| 国模精品视频一区二区| 五月激情六月婷婷| 欧美三级欧美成人高清www| 国内精品久久99人妻无码| 久久都是精品| 午夜精品一区二区三区四区 | 一区二区高清| 久久久久久久久久久久久9999| 中国色在线日|韩| 伊是香蕉大人久久| 亚洲永久精品视频| 一区二区三区蜜桃| 9.1成人看片| 男女性色大片免费观看一区二区| 亚洲一区二区精品在线| 欧美电影院免费观看| 欧美精品videossex88| 老司机午夜福利视频| 色综合天天综合网国产成人综合天| 久久av无码精品人妻系列试探| 天堂av在线一区| 青少年xxxxx性开放hg| 波多野结衣一区二区三区免费视频| 久久久久日韩精品久久久男男 | 亚洲一区导航| 欧美精品情趣视频| 爽爽视频在线观看| 欧美视频第一页| 999精品久久久| 成人免费毛片片v| 国产精品久久久久9999小说| 国产精品久久天天影视| 国产欧美日韩一区| 电影一区二区| 久久久久久久久网站| melody高清在线观看| 超碰在线免费97| 亚洲精品久久久蜜桃| 少妇饥渴放荡91麻豆| 狠狠色丁香婷综合久久| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 日韩在线欧美| 精品一区久久久| 亚洲精品毛片| 青青久久av北条麻妃海外网| 日本中文字幕在线播放| 日韩av影院在线观看| av小说天堂网| 色88888久久久久久影院野外| 欧洲猛交xxxx乱大交3| 久久久精品2019中文字幕之3| 国产精品嫩草影视| 久久精品女人天堂| 日韩人妻无码精品久久久不卡| av永久不卡| 精品视频高清无人区区二区三区| 97色婷婷成人综合在线观看| 日本91av在线播放| a级大胆欧美人体大胆666| www.日韩欧美| 91av资源在线| 亚洲视频日韩精品| 亚欧在线观看视频| 精品国产伦一区二区三区免费| 一级二级三级视频| 在线看国产一区二区| 中日韩精品视频在线观看| 一区二区三区四区视频精品免费| 九九九视频在线观看| 91视频一区二区| 中文字幕一区二区人妻电影丶| 国产精品亚洲午夜一区二区三区| wwwwww.色| 久久精品女人| 成人免费观看毛片| 欧美一级网站| 欧美亚洲一二三区| 99在线精品免费视频九九视 | 国产精品永久入口久久久| 成人自拍视频| 成人免费在线网址| 伊人久久大香伊蕉在人线观看热v| 国产精品成人aaaaa网站| 亚洲黄色网址| 国产成+人+综合+亚洲欧洲 | 欧美99在线视频观看| 在线看成人av电影| 色综合蜜月久久综合网| 亚洲图片欧洲图片日韩av| 欧美一站二站| 亚洲午夜激情| 99精品视频在线| 永久免费在线看片视频| 亚洲国产精品综合久久久| 91香蕉视频网址| 自拍偷拍欧美| 久久综合久久久久| 一区二区自拍| 国产日韩一区二区在线| 久久三级福利| 亚洲欧美自拍另类日韩| 国内精品在线播放| 韩国三级在线看| 不卡一区中文字幕| 国精产品一区一区三区免费视频 | 欧美日本国产精品| 精品色999| 91xxx视频| 在线免费高清一区二区三区| 久久久久久久中文| 久久性天堂网| 亚洲综合20p| 国产aⅴ精品一区二区三区色成熟| 国产chinese中国hdxxxx| 91视频xxxx| 国产白丝一区二区三区| 亚洲精品视频在线看| 日韩av在线天堂| 色噜噜狠狠成人网p站| 一级特黄特色的免费大片视频| 日韩欧美另类在线| 无码精品一区二区三区在线| 亚洲天堂av网| caoporn97在线视频| 国模吧一区二区三区| 电影一区电影二区| 成人自拍爱视频| 精品一区欧美| ijzzijzzij亚洲大全| 一本久久综合| 亚洲一二三不卡| 99久久久无码国产精品| 69xxx免费| 亚洲成人一区在线| 亚洲天堂aaa| 亚洲第一区第二区| 午夜国产福利在线| 韩国三级日本三级少妇99| 国产一区二区精品调教| http;//www.99re视频| 亚洲影院天堂中文av色| 在线看视频不卡| 中文日韩欧美| 国产九九九视频| 国产亚洲自拍一区| 国产乡下妇女做爰| 欧美日韩精品一区视频| 亚洲三区在线观看无套内射| 久热精品视频在线观看一区| 日本免费一区二区三区四区| 91精品免费| 青青草原综合久久大伊人精品| 亚洲精品久久久久久久蜜桃臀| 美女高潮久久久| 一区二区三区免费在线观看视频| 综合av第一页| 久久精品偷拍视频| 日韩成人中文字幕| 一区二区三区伦理| 国产精品一区二区三区免费视频| 欧美午夜18电影| 国产传媒久久久| 久久精品久久久精品美女| 18禁裸乳无遮挡啪啪无码免费| 一区二区三区在线不卡| 国产又粗又黄又爽的视频| 亚洲最新在线视频| 在线天堂中文资源最新版| 国产精品制服诱惑| 亚洲视频免费| 妖精视频在线观看| 中文字幕一区日韩精品欧美| 色老头在线视频| 亚洲欧美日本另类| 成人免费观看在线观看| av免费精品一区二区三区| 亚洲视屏在线观看| 蜜芽一区二区三区| 精品无码人妻一区| 亚洲成av人片| 欧美自拍偷拍第一页| 色综合久久中文字幕综合网小说| 亚洲国产伊人| 一区二区三区四区欧美| 蜜臀av一区二区| 久久久久亚洲av无码a片| 日韩欧美中文在线| 久青青在线观看视频国产| 青草青草久热精品视频在线观看| 日韩高清影视在线观看| 91视频 -- 69xx| 久久丝袜美腿综合| 日本a级c片免费看三区| 国产一区二区三区三区在线观看 | 久久网站免费观看| 第四色婷婷基地| 国产精品久久精品日日| 国产孕妇孕交大片孕| 久久视频中文字幕| 日本超碰一区二区| 免费看黄在线看| 99久久婷婷国产综合精品电影| 免费观看成人毛片| 亚洲天堂av在线免费观看| 成人免费一区| 国产大尺度在线观看| 国产精品综合一区二区三区| 久久久精品视频在线| 欧美精品一区二区不卡| 亚洲精品成人图区| 日韩福利二区| 久久99久久99| 毛片a片免费观看| 亚洲国内高清视频| 日本综合字幕| 中文字幕在线乱| 99精品久久久久久| 日韩熟女一区二区| 久久九九国产精品怡红院| 99久久人爽人人添人人澡| 内射国产内射夫妻免费频道| 国产亚洲精久久久久久| 国产精品一区二区av白丝下载 | 亚洲国产精品va在线看黑人动漫| 欧美调教sm| 亚洲精品一区二区三| 国产激情一区二区三区四区 | 欧美日韩一区二区欧美激情| 91亚洲天堂| 美日韩精品免费| 国产在线精品国自产拍免费| 久久精品国产亚洲av高清色欲| 日韩av最新在线| 色综合视频一区二区三区日韩| 久青草视频在线播放| 中文字幕精品三区| 日韩一区二区三区在线观看视频| 国产91精品在线播放| 午夜日韩激情| 亚洲色成人网站www永久四虎| 91精品国产91久久久久久一区二区 | 中文字幕在线观看一区| 色网站免费观看| 成人免费观看网址|