第三章 view的事件體系

1.View的結(jié)構(gòu)
Paste_Image.png
2.View的位置參數(shù)
Paste_Image.png

left,top,right,bottom是相對父view的位置參數(shù)憎账,獲得參數(shù)的方法是getLeft()
getX()和getY()返回的是相對于當前view左上角的位置金刁,getRawX和getRawY是相對于屏幕的。

Paste_Image.png
MotionEvent

對于View殖告,可以使用setOnTouchListener()方法來監(jiān)聽touch events而不需要繼承現(xiàn)有的View

       View myView = findViewById(R.id.my_view); 
       myView.setOnTouchListener(new OnTouchListener() { 
          public boolean onTouch(View v, MotionEvent event) { 
          return true; 
      } 
TouchSlop

最小的滑動距離炊豪,獲得方法

ViewConfiguration.get(getContext()).getScaledTouchSlop();
VelocityTracker

計算滑動速度

 //在View的onTouchEvent方法中 
 VelocityTracker velocityTracker = VelocityTracker.obtain(); 
 velocityTracker.addMoveMent(event); 
 //時間間隔設為100ms 
 tracker.computeCurrentVelocity(100); 
 int Vx = (int)velocityTracker.getXVelocity(); 
 int Vy = (int)VelocityTracker.getYVelocity(); 
 //不再使用的時候湃缎,需要清除并回收 
 velocityTracker.clear(); 
 velocityTracker.recycle(); 
GestureDetector

手勢檢測岁忘,包含單機,雙擊深员,長按滑動等

使用方法:
  1. 實例化 GestureDetectorCompat 類
  2. 如需監(jiān)測所有的手勢负蠕,則實現(xiàn) GestureDetector.OnGestureListener 接口和 GestureDetector.OnDoubleTapListener 接口。
  3. 若只需監(jiān)測部分手勢倦畅,則繼承 GestureDetector.SimpleOnGestureListener 類遮糖。
GestureDetectorCompat detector = new GestureDetectorCompat(getContext(),new listener());

/**實現(xiàn)**/
class listener extends GestureDetector.SimpleOnGestureListener{
        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            return super.onSingleTapUp(e);
        }

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            return super.onFling(e1, e2, velocityX, velocityY);
        }
    }
Scroller

實現(xiàn)view的彈性滑動,使用方法

Scroller scroller = new Scroller(getContext());

    /**
     * 滑動到指定地方
     * @param destX
     * @param destY
     */
    private void smoothScrollTo(int destX,int destY){
        int scrollX  = getScrollX();
        int dx = destX - scrollX;
        //startX,startY,dx,dy,duration
        scroller.startScroll(scrollX,0,dx,0,100);
        invalidate();
    }

    @Override
    public void computeScroll() {
        if(scroller.computeScrollOffset()){
            //smoothScrollTo
            scrollTo(scroller.getCurrX(),scroller.getCurrY());
            postInvalidate();
        }
    }

學習資料:

  1. Android Scroller完全解析滔迈,關于Scroller你所需知道的一切
  2. Animating a Scroll Gesture
View的滑動
  1. 通過view的scrollTo和scrollBy方法來實現(xiàn)滑動
  2. 通過動畫實現(xiàn)滑動
  3. 通過改變view的LayoutParams實現(xiàn)滑動

SrollTo/ScrollBy

ScrollTo(x,y)是相對于初始位置止吁,ScrollBy(x,y)是相對于當前位置被辑。
getScrollX和getScrollY獲得的值燎悍,x左滑動為正,y上滑動為正盼理。

動畫

使用View動畫或者屬性動畫谈山,View動畫只能移動影響不能移動view,所以最好使用屬性動畫宏怔。

//view動畫
<?xml version=  "1.0"   encoding=  "utf-8"  ?>
    <set xmlns:android=  "http://schemas.android.com/apk/res/android"
        android:fillAfter=  "true"
        >
        <translate 
            android:fromXDelta=  "0"
            android:fromYDelta=  "0"
            android:toXDelta=  "500"
            android:toYDelta=  "1000"
            android:duration=  "10000"
            android:interpolator=  "@android:anim/linear_interpolator"
            />
    </set>

 Animation animation = AnimationUtils.loadAnimation(this ,R.anim.translate); 
 layout.setAnimation(animation); 
animation.start(); 
 //使用屬性動畫實現(xiàn)移動 
 ObjectAnimator.ofFloat(layout,"translationX", 0,100).setDuration(1000).start(); 

最后一種

 ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) layout.getLayoutParams(); 
params.width+= 1000 ; 
params.leftMargin+=1000; 
layout.requestLayout(); 

優(yōu)缺點:

Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奏路,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子臊诊,更是在濱河造成了極大的恐慌鸽粉,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抓艳,死亡現(xiàn)場離奇詭異触机,居然都是意外死亡,警方通過查閱死者的電腦和手機玷或,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門儡首,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人偏友,你說我怎么就攤上這事蔬胯。” “怎么了位他?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵氛濒,是天一觀的道長产场。 經(jīng)常有香客問我,道長舞竿,這世上最難降的妖魔是什么涝动? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮炬灭,結(jié)果婚禮上醋粟,老公的妹妹穿的比我還像新娘。我一直安慰自己重归,他們只是感情好米愿,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鼻吮,像睡著了一般育苟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上椎木,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天违柏,我揣著相機與錄音,去河邊找鬼香椎。 笑死漱竖,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的畜伐。 我是一名探鬼主播馍惹,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼玛界!你這毒婦竟也來了万矾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤慎框,失蹤者是張志新(化名)和其女友劉穎良狈,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笨枯,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡薪丁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了猎醇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窥突。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖硫嘶,靈堂內(nèi)的尸體忽然破棺而出阻问,到底是詐尸還是另有隱情,我是刑警寧澤沦疾,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布称近,位于F島的核電站第队,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏刨秆。R本人自食惡果不足惜凳谦,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望衡未。 院中可真熱鬧尸执,春花似錦、人聲如沸缓醋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽送粱。三九已至褪贵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抗俄,已是汗流浹背脆丁。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留动雹,地道東北人槽卫。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像洽胶,于是被迫代替她去往敵國和親晒夹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容