精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产女人18毛片| 国产精品视频一区二区三区四| 亚洲性图第一页| 国产粉嫩在线观看| 久久久久久**毛片大全| 国产精品精品视频| 国产av无码专区亚洲av毛网站| 9l视频自拍九色9l视频成人| 色哟哟国产精品免费观看| 亚洲蜜桃在线| 黑人精品一区二区| 蜜臀久久久久久久| 欧美黄色性视频| 级毛片内射视频| 精品视频在线一区| 欧美日韩美女视频| 中文字幕欧美日韩一区二区| 色婷婷av一区二区三区之红樱桃 | 久久99精品久久久久久久久久久久| 最好看的2019年中文视频| 国产又黄又嫩又滑又白| 欧美大片免费观看网址| 夜夜亚洲天天久久| 视频一区二区在线| 日本wwwxxxx| 精品一区二区三区免费播放| 欧美中文字幕视频| jizz亚洲少妇| 欧美一区电影| 日韩精品在线播放| 美女黄色一级视频| 9.1麻豆精品| 色婷婷av一区| 日本人体一区二区| 欧美日韩色网| 1024国产精品| 亚洲精品中文综合第一页| 天堂在线一二区| 国产69精品一区二区亚洲孕妇| 国产精品嫩草视频| 无码人妻精品一区二区三区蜜桃91 | 国产亚洲永久域名| 欧美巨乳在线观看| 日本裸体美女视频| 色综合久久一区二区三区| 亚洲美女动态图120秒| 伦理片一区二区| 日韩精品成人| 日韩一区二区三区四区五区六区| 免费涩涩18网站入口| gay欧美网站| 精品欧美国产一区二区三区| 国产日韩亚洲欧美在线| 91精品久久| 亚洲蜜臀av乱码久久精品蜜桃| 一区二区三区四区五区视频| 国产爆初菊在线观看免费视频网站| 91老司机福利 在线| 精品伦精品一区二区三区视频| 丰满少妇一级片| 国产福利精品一区| 999国产视频| 亚洲国产成人在线观看| 国产电影一区二区三区| 成人一区二区在线| 亚洲av无码乱码国产精品| 国产盗摄一区二区三区| 成人情视频高清免费观看电影| 性生交生活影碟片| 成人av在线资源网| 国产一区精品在线| 日本天堂影院在线视频| 久久综合色天天久久综合图片| 噜噜噜噜噜久久久久久91| 飘雪影视在线观看免费观看 | 老司机精品导航| 国产91在线播放精品91| 自拍偷拍校园春色| 久久精品国产一区二区三区免费看| 国产日韩精品在线观看| a级片在线免费看| www.激情成人| 欧美福利精品| 欧美三级电影一区二区三区| 一区二区三区中文字幕| 奇米影视亚洲色图| 成人日韩在线观看| 91精品在线麻豆| 一级黄色免费视频| 国产探花在线精品| 欧美成人国产va精品日本一级| 黄色一级片在线免费观看| 在线综合亚洲| 国产精品久久久久久久天堂| a天堂在线视频| www一区二区| 中文字幕在线亚洲三区| 波多野结衣乳巨码无在线观看| 欧美体内谢she精2性欧美| 亚洲高清在线免费观看| 久久国产精品免费一区二区三区| 亚洲精品一线二线三线 | 国产精品久久久久婷婷二区次| 精品少妇人妻av一区二区| 91破解版在线观看| 欧美性大战久久久久久久蜜臀| 思思久久精品视频| 色婷婷av一区二区三区丝袜美腿| 在线视频欧美性高潮| 免费一级全黄少妇性色生活片| 日韩综合小视频| 99视频在线免费观看| 久蕉依人在线视频| 亚洲自拍偷拍九九九| 麻豆一区二区三区视频| 高清日韩欧美| 北条麻妃99精品青青久久| 中文字幕一区二区三区精品 | 手机av在线免费| 老司机成人在线| 久久人体大胆视频| 69亚洲精品久久久蜜桃小说| 国产成人8x视频一区二区| 先锋在线资源一区二区三区| av手机在线观看| 在线不卡免费欧美| 日韩毛片无码永久免费看| 国产在线日韩| 成人看片人aa| 国产精品秘入口| 精品久久久久国产| 亚洲熟妇一区二区| 久久综合88| 国产精品久久电影观看| 人操人视频在线观看| 一区二区三区在线视频观看58| 亚洲欧美国产日韩综合| 嫩草一区二区三区| 97精品在线观看| 国产91免费看| 亚洲综合免费观看高清完整版在线 | 亚洲精品精选| 99中文视频在线| av软件在线观看| 欧美高清视频一二三区 | 性欧美暴力猛交69hd| 国产又爽又黄免费软件| 久久久www成人免费毛片麻豆 | 正在播放亚洲一区| 天堂网中文在线观看| 日本va欧美va瓶| 日本精品一区二区三区视频| 蜜桃视频动漫在线播放| 亚洲国产精品高清久久久| 久久精品无码人妻| 国产91精品久久久久久久网曝门| 300部国产真实乱| 在线一区二区三区视频| 欧美俄罗斯乱妇| 亚洲精品喷潮一区二区三区| 一区二区三区精品久久久| 波多野结衣电影免费观看| 在线中文一区| 7777奇米亚洲综合久久| 在线播放免费av| 日韩精品在线看片z| 麻豆成人在线视频| eeuss国产一区二区三区| 青青草成人免费在线视频| 美女扒开腿让男人桶爽久久动漫| 91高潮在线观看| 日韩欧美在线观看一区二区| 色婷婷亚洲一区二区三区| 精品人伦一区二区| 美女一区二区视频| 天天在线免费视频| 哺乳挤奶一区二区三区免费看| 国外成人在线视频| 久蕉依人在线视频| 欧美酷刑日本凌虐凌虐| 人妻少妇精品一区二区三区| 国产69精品久久99不卡| www.中文字幕在线| 成人影院天天5g天天爽无毒影院| 国产三级精品网站| 国产高清在线a视频大全| 日韩理论片久久| 亚洲性生活大片| 亚洲最大成人综合| 国产真实乱人偷精品人妻| 久久超碰97人人做人人爱| 国产精品videossex国产高清| 久久久久久毛片免费看 | 国产91在线精品| 精品中文字幕乱| 青青视频在线观| 欧美一区二区三区爱爱| 国产乱国产乱老熟| 亚洲色图欧洲色图| 中文在线一区二区三区| 老汉av免费一区二区三区 | 污视频在线免费观看网站| 日韩电影免费在线观看中文字幕 | 欧美一区二区三区视频在线| 男人的天堂一区二区| 国产精品嫩草影院av蜜臀| 娇妻高潮浓精白浆xxⅹ| 美腿丝袜亚洲一区| 欧美亚洲日本一区二区三区| 国产精品久久久久无码av| 精品国产91亚洲一区二区三区www| 成人深夜福利| 国内精品免费午夜毛片| 国产高清一区二区三区视频| 精品性高朝久久久久久久| 国产wwwwwww| 欧美午夜一区二区三区| 日韩在线视频免费播放| 一区二区三区小说| 国产又粗又猛又爽又黄的视频小说 | 午夜精品视频在线观看| 顶臀精品视频www| 欧美国产成人精品| 国产交换配乱淫视频免费| 成人国产亚洲欧美成人综合网| 免费成年人高清视频| 免费人成黄页网站在线一区二区| 国内性生活视频| 影音先锋久久精品| 男女啪啪免费观看| 欧美国产美女| 五月天亚洲综合情| 久久av网址| 欧美精品亚洲精品| 久久91在线| 精品欧美一区二区三区久久久| 一区二区网站| 99re资源| 97品白浆高清久久久久久| 91午夜在线播放| 国产精品原创视频| 国产成人免费91av在线| eeuss鲁一区二区三区| 欧美激情乱人伦| 毛片激情在线观看| 亚洲天堂av在线免费| 欧美欧美欧美| 亚洲精品国产精品乱码不99按摩 | 一区二区三区蜜桃网| 日韩亚洲欧美中文字幕| 国产性做久久久久久| 日韩精品电影一区二区| 99视频在线观看一区三区| 国产乱淫av麻豆国产免费| 国产乱人伦偷精品视频不卡| 深爱五月综合网| 精品一区二区三区免费视频| www.日本一区| 国产精品一卡| 欧美a在线视频| 先锋影音久久| 亚洲成熟丰满熟妇高潮xxxxx| 久久人人97超碰国产公开结果| 91好吊色国产欧美日韩在线| 亚洲精品视频啊美女在线直播| 国产av麻豆mag剧集| 亚洲国产激情| 黄色一级在线视频| 亚洲综合另类| 成人精品视频一区二区| 新67194成人永久网站| 成年人观看网站| 蜜臀av亚洲一区中文字幕| 日本爱爱免费视频| 蜜桃视频免费观看一区| 三级网站免费看| 国产凹凸在线观看一区二区| 久久久久久婷婷| 国产三级一区二区| 人妻互换一区二区激情偷拍| 一区在线观看免费| 国产网友自拍视频| 日韩欧美国产免费播放| 亚洲精品一区二三区| 日韩一级视频免费观看在线| 黄频在线免费观看| 亚洲精品国产品国语在线| 成年人在线观看| 久久久精品国产亚洲| 日韩少妇视频| 久久久久久久久亚洲| 9i看片成人免费高清| 国产一区二区视频在线观看| 亚洲精品在线播放| 精品一区久久| 欧美亚洲高清| 麻豆md0077饥渴少妇| 亚洲精品韩国| 日本高清久久久| 91女神在线视频| 艳妇荡乳欲伦69影片| 午夜在线电影亚洲一区| 中文字幕在线播出| 欧美成人在线直播| 视频在线观看你懂的| 久久中文字幕视频| 老牛影视精品| 国产精品久久中文| 高潮按摩久久久久久av免费| 欧美在线播放一区| 亚洲黄色毛片| 国产精品v日韩精品v在线观看| 国产99精品视频| 国产一区二区三区视频播放| 亚洲一区在线视频| 中文字幕 亚洲视频| 日韩国产欧美精品一区二区三区| 在线毛片网站| 97婷婷涩涩精品一区| 日韩在线成人| 日本一区免费在线观看| 亚洲天天影视网| 天天干天天综合| eeuss影院一区二区三区 | 伊人久久影院| 久久久久se| 欧美a级片网站| 777一区二区| 91免费看`日韩一区二区| 极品魔鬼身材女神啪啪精品| 日本久久电影网| 亚洲毛片欧洲毛片国产一品色| 久久精品福利视频| 日韩av首页| 黄色小网站91| 亚洲毛片播放| 可以看的av网址| 日韩美女精品在线| 国产成人a v| 亚洲情综合五月天| 极品在线视频| 91久久久久久久久| 日韩中文首页| 亚洲精品视频导航| 国产拍欧美日韩视频二区| 日韩欧美a级片| 欧美本精品男人aⅴ天堂| 伊人精品影院| 91精品中文在线| 女人av一区| 999在线免费视频| 91麻豆免费看片| 无码无套少妇毛多18pxxxx| 精品一区二区三区三区| 啊啊啊久久久| 欧美污视频久久久| 翔田千里一区二区| 成熟妇人a片免费看网站| 精品免费在线视频| 裸体xxxx视频在线| 国产精品网址在线| 色97色成人| 国产无色aaa| 亚洲乱码日产精品bd| jizz国产视频| 久久夜色精品国产欧美乱| 日本中文字幕视频一区| 一本—道久久a久久精品蜜桃| 国产原创一区二区三区| 希岛爱理中文字幕| 欧美一级艳片视频免费观看| 超碰97国产精品人人cao| 国产免费一区二区三区| 午夜亚洲一区| 国产精品av久久久久久无| 在线视频欧美精品| 国产婷婷视频在线 | 这里只有久久精品视频| 在线看片第一页欧美| 国产一区一区| 免费人成在线观看视频播放| 国产v日产∨综合v精品视频| 无码人妻久久一区二区三区不卡| 夜夜嗨av一区二区三区免费区 | 亚洲在线久久| 欧美一区二区免费在线观看| 欧美色xxxx| 国产二区视频在线观看| 亚洲精品免费一区二区三区| 国产在线欧美| 丁香激情五月少妇| 欧美顶级少妇做爰| ****av在线网毛片| 亚洲视频电影| 粉嫩aⅴ一区二区三区四区| 亚洲大片免费观看| 久久激情五月丁香伊人| 秋霞一区二区| 别急慢慢来1978如如2| 亚洲免费观看高清完整版在线 |