日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀] 說(shuō)在前面,很早時(shí),android就開(kāi)始有支持單點(diǎn)手勢(shì)(單點(diǎn)觸控),到android2.2開(kāi)始支持多點(diǎn)觸控.不同的動(dòng)作序列合起來(lái)表示不同的手勢(shì)。比如Fling手勢(shì)包括三個(gè)過(guò)程:將手指按觸在

 說(shuō)在前面,很早時(shí),android就開(kāi)始有支持單點(diǎn)手勢(shì)(單點(diǎn)觸控),到android2.2開(kāi)始支持多點(diǎn)觸控.

不同的動(dòng)作序列合起來(lái)表示不同的手勢(shì)。比如Fling手勢(shì)包括三個(gè)過(guò)程:將手指按觸在屏幕上,然后快速掃過(guò),最后

抬起手指,并且在抬起手指仍然在運(yùn)動(dòng)(也就是說(shuō)抬起手指前,運(yùn)動(dòng)的速度并不會(huì)減少).每一個(gè)步操作都會(huì)觸發(fā)相應(yīng)的事件。

在View控件內(nèi),開(kāi)發(fā)人員可以像處理普通的單擊事件時(shí)使用setOnClickListener()和setOnLongClickListener()

方法一樣處理手勢(shì)。onTouchEvent()回調(diào)方法用于探測(cè)View區(qū)域內(nèi)的用戶(hù)動(dòng)作。

onTouchEvent()回調(diào)方法只接收一個(gè)參數(shù)。MotionEvent對(duì)象。MotionEvent對(duì)象包含在View內(nèi)觸發(fā)的所有類(lèi)型動(dòng)作

的細(xì)節(jié),通過(guò)收集和分析連續(xù)的MotionEvent對(duì)象,開(kāi)發(fā)人員可以確定產(chǎn)生了何種手勢(shì)。你可以使用MotionEvent數(shù)據(jù)

來(lái)識(shí)別的探測(cè)任何你能想像的手勢(shì)。不過(guò)你也可以使用Android SDK 內(nèi)置的手勢(shì)探測(cè)器來(lái)探測(cè)普通的用戶(hù)動(dòng)作。

android目前擁有兩個(gè)不同的類(lèi)用于手勢(shì)探測(cè)。

(1) GestureDetector類(lèi)可以用于探測(cè)一般的單點(diǎn)觸控手勢(shì)。

(2) ScaleGestureDetector可以用來(lái)探測(cè)多點(diǎn)縮放操作手勢(shì)。

除了普通的方向性手勢(shì),你還可以使用API level 4中引入的android.gesture包中的GestureOverlayView來(lái)識(shí)別命令手勢(shì)。

下面主要是處理普通單點(diǎn)觸控手勢(shì)

API level 1中引入的GestureDetector類(lèi)可以用來(lái)探測(cè)單個(gè)手勢(shì)。GestureDetector類(lèi)所支持的單指手勢(shì)包括以下幾種。

onDown:當(dāng)用戶(hù)第一次按觸屏幕時(shí)觸發(fā)。

onShowPress:當(dāng)用戶(hù)按觸屏幕,并且在抬起或移動(dòng)手指之前觸發(fā):用于顯示顯示地指示按觸事件確已探測(cè)到。

onSingleTapUp:作為單擊(sinlge-tap)事件的一部分,在用戶(hù)從觸屏上抬起手指(使用抬起MotionEvent)時(shí)觸發(fā)。

onSingleTabConfirmed:單擊事件發(fā)生時(shí)調(diào)用。

onDoubleTab:雙擊(double-tap)事件發(fā)生時(shí)調(diào)用。

onDoubleTabEvent:在任何雙擊手勢(shì)發(fā)生時(shí)調(diào)用,包括按下(down),移動(dòng),或抬起(up)MotionEvent.

onLongPress:與onSingleTapUp類(lèi)似,但只在用戶(hù)保持按觸狀態(tài)且不移動(dòng)一定時(shí)間,并且不是標(biāo)準(zhǔn)的單擊操作時(shí)調(diào)用。

onScroll:用戶(hù)按下手指并且勻速移動(dòng)手指后,在抬起手指前調(diào)用。通常也稱(chēng)為“拖曳”(dragging).

onFling:在用戶(hù)按下并且加速移動(dòng)手指后,在抬起手指前調(diào)用,通常也稱(chēng)為"拂動(dòng)(flick)手勢(shì)。

提示:你可以使用GestureDetector.SimpleOnGestureListener類(lèi)來(lái)監(jiān)聽(tīng)由GestureDetector識(shí)別的任何手勢(shì)。

實(shí)例:在Android中實(shí)現(xiàn)圖片左右滑動(dòng)效果。

參考來(lái)自:

http://www.cnblogs.com/hanyonglu/archive/2012/02/13/2349827.html

原文比較詳細(xì),在此不轉(zhuǎn)。注意的一點(diǎn)就是,為了不帶那些不用的方法,可以繼承SimpleOnGestureListener類(lèi)。

說(shuō)一下,我個(gè)人的感受。

1.受到一些網(wǎng)上不正確的文章,實(shí)習(xí)OnTouchListener了。

結(jié)果,本來(lái)應(yīng)該重寫(xiě)GestureDetector.OnGestureListener接口的

onTouchEvent方法時(shí),實(shí)現(xiàn)了onTouch()方法,害我老是看不到效果,這里弄,那里查,結(jié)果,找了開(kāi)始那本書(shū)學(xué)習(xí)。

系統(tǒng)學(xué)習(xí)之后,然后我看源代碼。發(fā)現(xiàn)了GestureDetector類(lèi)這樣的javadoc:

1/**

2* To use this class:

3 *

     

    4 *

  • Create an instance of the {@code GestureDetector} for your {@link View}

     

    5 *

  • In the {@link View#onTouchEvent(MotionEvent)} method ensure you call

     

    6 * {@link #onTouchEvent(MotionEvent)}. The methods defined in your callback

    7 * will be executed when the events occur.

    8 *

 

9**/

上面那個(gè)ensure讓我覺(jué)得應(yīng)該檢查下是不是實(shí)現(xiàn)了。然后,結(jié)果就出來(lái)了。哈哈。太不小心了。

關(guān)于判斷手勢(shì)效果的代碼:

1Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT);

2 if (e1.getX() - e2.getX() > 120) {

3 this.mFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in));

4 this.mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out));

5this.mFlipper.showNext();

6 return true;

7 }

1.上面觸發(fā)事件時(shí),我寫(xiě)有Toast提醒代碼,但是實(shí)際上,用戶(hù)看不到。

2.第二 上面判斷手勢(shì)距離要求120px有點(diǎn)大長(zhǎng)了。

下面學(xué)習(xí)下其中起到關(guān)鍵作用的另外一個(gè)類(lèi)。ViewFlipper.

ViewFlipper的類(lèi)繼承關(guān)系如下:

ViewFlipper->ViewAnimator->FrameLayout->ViewGroup->View->Object

看一下類(lèi)描述:(中文翻譯來(lái)自Android中文翻譯組)

1/**

2 * Simple {@link ViewAnimator} that will animate between two or more views

3 * that have been added to it. Only one child is shown at a time. If

4 * requested, can automatically flip between each child at a regular interval.

5 *

6被添加到ViewFlipper中的兩個(gè)或兩個(gè)以上的視圖之間將執(zhí)行一個(gè)簡(jiǎn)單的ViewAnimator動(dòng)畫(huà)。

1一次僅能顯示一個(gè)子視圖。如果需要,可以設(shè)置間隔時(shí)間使子視圖像幻燈片一樣自動(dòng)顯示。

1(譯者注:com.example.android.apis.view/Animation_2.java包含該類(lèi)示例程序)

2

3 * @attr ref android.R.styleable#ViewFlipper_flipInterval

4 * @attr ref android.R.styleable#ViewFlipper_autoStart

5 */

經(jīng)過(guò)使用SimpleOnGestureListener類(lèi)后的全部Java代碼如下:

01package me.banxi.slideapp;

02

03import android.app.Activity;[!--empirenews.page--]

04import android.os.Bundle;

05import android.util.Log;

06import android.view.GestureDetector;

07import android.view.GestureDetector.OnGestureListener;

08import android.view.MotionEvent;

09import android.view.View;

10import android.view.View.OnTouchListener;

11import android.view.animation.AnimationUtils;

12import android.widget.ImageView;

13import android.widget.Toast;

14import android.widget.ViewFlipper;

15

16public class SlideAndGestureActivity extends Activity {

17 private ViewFlipper mFlipper;

18 private GestureDetector mDetector;

19 /** Called when the activity is first created. */

20 @Override

21 public void onCreate(Bundle savedInstanceState) {

22 super.onCreate(savedInstanceState);

23 setContentView(R.layout.slide);

24

25 mDetector = new GestureDetector(getApplicationContext(),new FlingListener());

26 mFlipper = (ViewFlipper )findViewById(R.id.viewFlipper1);

27

28 mFlipper.addView(addTextView(R.drawable.one));

29 mFlipper.addView(addTextView(R.drawable.two));

30 mFlipper.addView(addTextView(R.drawable.three));

31 mFlipper.addView(addTextView(R.drawable.four));

32 mFlipper.addView(addTextView(R.drawable.five));

33

34 }

35

36 private View addTextView(int resId){

37 ImageView view = new ImageView(this);

38 view.setImageResource(resId);

39 return view;

40 }

41

42 @Override

43 public boolean onTouchEvent(MotionEvent event) {

44 return mDetector.onTouchEvent(event);

45 }

46

47 private class FlingListener extends GestureDetector.SimpleOnGestureListener{

48 @Override

49 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,

50 float velocityY) {

51 String msg = "e1:"+e1.getX()+","+e1.getY()+"e2:"+e2.getX()+","+e2.getY();

52 Log.i("MotionSlide", msg);

53 if (e1.getX() - e2.getX() > 120) {

54 mFlipper.setInAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.push_left_in));

55 mFlipper.setOutAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.push_left_out));

56 mFlipper.showNext();

57 return true;

58 } else if (e1.getX() - e2.getX() < -120) {

59 mFlipper.setInAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.push_right_in));

60 mFlipper.setOutAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.push_right_out));

61 mFlipper.showPrevious();

62 return true;

63 }

64 return false;

65 }

66

67 }

68

69}

在實(shí)際的項(xiàng)目開(kāi)發(fā)中會(huì)遇到這樣一樣問(wèn)題。

比如。上面 例子添加的ImageView默認(rèn)也許不處理事件。所以 可以 正常的滑動(dòng)。

但是在我的實(shí)際的開(kāi)發(fā)中,的發(fā)現(xiàn)如ViewFlipper上面有一個(gè)GridView,GridView上面排列有Button.然后滑動(dòng)手勢(shì)

的事件就不會(huì)傳播到ViewFlipper中去啊。于是我開(kāi)始是在GridView上面 設(shè)置 一個(gè)margin

在margin區(qū)域里滑動(dòng)事件 就會(huì)傳遞給ViwFlipper。(嚴(yán)格來(lái)說(shuō)應(yīng)該是mDetecotor.onTouchEvent()中去。

然后我就在想這個(gè)事件 傳播的問(wèn)題,然后我想到因?yàn)槠鋵?shí)主要調(diào)用mDetecotor的時(shí)候,

也是在Activity中的OnTouchEvent(MotionEvent)方法 中。

中將這個(gè)MotionEvent事件以這樣return mDetector.onTouchEvent(event)方法處理返回 。

于是 想在button中事件中的ACTION_MOVE中也調(diào)用mDetector.OnTouchEvent()

但是結(jié)果 不行。后來(lái)我就不區(qū)分ACTION_MOVE等等了。

于是,最后,我在對(duì)button和gridView做了如下處理。

1button.setOnTouchListener(new OnTouchListener() {

2 @Override

3 public boolean onTouch(View v, MotionEvent event) {

4 return mDetector.onTouchEvent(event);

5

6 }

7});

1gridView.setOnTouchListener(new OnTouchListener() {

2 @Override

3 public boolean onTouch(View v, MotionEvent event) {

4 return mDetector.onTouchEvent(event);

5 }

6});

我想,因?yàn)镕liing這樣事件不僅僅是ACTION_MOVE他還有開(kāi)始的OnDown等等一系列事件組合起來(lái)的。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶(hù)體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(chē)(EV)作為新能源汽車(chē)的重要代表,正逐漸成為全球汽車(chē)產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車(chē)的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車(chē)的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車(chē) 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車(chē)場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周?chē)娮釉O(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉