GestureDetector & Scroller

GestureDetector

onScroll

onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)

參數(shù)解釋:

e1:第1個MotionEvent.ACTION_DOWN

e2:MotionEvent.ACTION_MOVE

distanceX:這里注意隧哮!這個值指的是上一個e2.getX()(沒有上一個e2的話取e1的值)與本次的e2.getX()的差值,而不是與e1.getX()的差值

distanceY:同 distanceX

onFling

onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)

參數(shù)解釋:

e1:第1個MotionEvent.ACTION_DOWN

e2:最后一個MotionEvent.ACTION_MOVE

velocityX:X軸上的移動速度骡楼,像素/秒

velocityY:Y軸上的移動速度扎拣,像素/秒

執(zhí)行循序

onDown ----> onScroll ----> onScroll ----> onScroll ----> ……… ----> onFling

PS: 如果慢速滑動赴肚,不會觸發(fā)onFling


Scroller

主要用于滾動,主要使用的滾動方法有:startScroll二蓝、fling

startScroll

startScroll(int startX,int startY,int dx,int dy,int duration)

平滑滾動誉券,指定起點startX、startY侣夷,dx横朋、dy為在x、y軸上滾動的偏移量百拓,耗時duration

通常用于:知道起點以及移動的距離的滾動

fling

fling(int startX,int startY,int velocityX,int velocityY,int minX,int maxX,int minY,int maxY)

慣性滑動琴锭,指定起點startX、startY衙传,指定x决帖、y軸的移動速度velocityX、velocityY蓖捶,指定在x地回、y軸上最小移動距離

通常用于:界面的慣性滑動

其他方法介紹

getCurrX() 、 getCurrY() //獲取Scroller當(dāng)前在x俊鱼、y軸上的位置

getFinalX() 刻像、getFinalY() //獲取Scroller最終在 x、y軸上停止的位置

setFinalX(int newX)并闲、setFinalY(int newY) //設(shè)置Scroller最終在 x细睡、y軸上停留的位置,沒有動畫效果帝火,直接跳到目標(biāo)位置

forceFinished(boolean finished) //強制結(jié)束本次滾動操作

abortAnimation() //終止動畫溜徙,直接滑動到指定的位置

isFinished() //返回Scroller是否已經(jīng)完成滾動

computeScrollOffset() //根據(jù)當(dāng)前已經(jīng)消逝的時間計算當(dāng)前的坐標(biāo)點,保存在mCurrX和mCurrY值中犀填, 動畫執(zhí)行完成后返回true


實踐

image

關(guān)鍵代碼(GestureDetector + Scroller )

private Scroller mScroller = new Scroller(context);
private GestureDetector mGestureDetector = new GestureDetector(context, gestureListener);
mGestureDetector.setIsLongpressEnabled(false);

private GestureDetector.SimpleOnGestureListener gestureListener = new GestureDetector.SimpleOnGestureListener() {

    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        ... ...  //做刻度滾動操作
    }

    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
         ... ...  //計算startX(mLastScrollX)蠢壹、startY、 minX九巡、maxX图贸、minY、maxY

        mScroller.fling(mLastScrollX , 0, (int) (-velocityX / 1.5), 0, minX, maxX, 0, 0);
        setNextMessage(MESSAGE_SCROLL);

        return true;
    }
};

private void setNextMessage(int message) {
    mAnimationHandler.removeMessages(MESSAGE_SCROLL);
    mAnimationHandler.sendEmptyMessage(message);
}

private Handler mAnimationHandler = new Handler() {

    public void handleMessage(Message msg) {
        mScroller.computeScrollOffset(); // 更新mCurrX和mCurrY值
        int cursorX = mScroller.getCurrX();
        int delta = mLastScrollX  - cursorX;
        mLastScrollX = cursorX;
        if (delta != 0) {
            ... ...  //做刻度滾動操作
        }

        // 滾動還沒有完成,到最后求妹,完成手動
        if (Math.abs(cursorX - mScroller.getFinalX()) < MIN_DELTA_FOR_SCROLLING) {
            mScroller.forceFinished(true);
        }

        if (!mScroller.isFinished()) {
            mAnimationHandler.sendEmptyMessage(msg.what);
        } else {
            ... ... //限制滾動范圍
        }
    }
};


持續(xù)更新...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乏盐,一起剝皮案震驚了整個濱河市佳窑,隨后出現(xiàn)的幾起案子制恍,更是在濱河造成了極大的恐慌,老刑警劉巖神凑,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件净神,死亡現(xiàn)場離奇詭異,居然都是意外死亡溉委,警方通過查閱死者的電腦和手機鹃唯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓣喊,“玉大人坡慌,你說我怎么就攤上這事≡迦” “怎么了洪橘?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長棵帽。 經(jīng)常有香客問我熄求,道長,這世上最難降的妖魔是什么逗概? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任弟晚,我火速辦了婚禮,結(jié)果婚禮上逾苫,老公的妹妹穿的比我還像新娘卿城。我一直安慰自己,他們只是感情好铅搓,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布瑟押。 她就那樣靜靜地躺著,像睡著了一般狸吞。 火紅的嫁衣襯著肌膚如雪勉耀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天蹋偏,我揣著相機與錄音便斥,去河邊找鬼。 笑死威始,一個胖子當(dāng)著我的面吹牛枢纠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播黎棠,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼晋渺,長吁一口氣:“原來是場噩夢啊……” “哼镰绎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起木西,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤畴栖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后八千,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吗讶,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年恋捆,在試婚紗的時候發(fā)現(xiàn)自己被綠了照皆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡沸停,死狀恐怖膜毁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情愤钾,我是刑警寧澤瘟滨,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站绰垂,受9級特大地震影響室奏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜劲装,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一胧沫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧占业,春花似錦绒怨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至念恍,卻和暖如春六剥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背峰伙。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工疗疟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瞳氓。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓策彤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子店诗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

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

  • View的事件體系 View的基礎(chǔ) view位置參數(shù)View的位置主要由它的四個頂點來決定裹刮,分別對應(yīng)于View的四...
    MZzF2HC閱讀 503評論 0 2
  • https://juejin.im/entry/5aa69dc851882555602093b2 什么是自動拆裝包...
    呂志豪閱讀 464評論 0 0
  • 更多分享:http://www.cherylgood.cn Scorller類官方介紹 This class en...
    Angels_安杰閱讀 944評論 0 3
  • View基礎(chǔ)概念 位置參數(shù) top、left庞瘸、right捧弃、bottom大小均是基于父容器的左或上的距離,由此可計算...
    簡約黑閱讀 632評論 0 0
  • #偽戀愛三十題之四五六 四+五 約會接吻 中秋節(jié)公司放假恕洲,bambam跟著金有謙一起回南揚州塔橡。 家里金媽媽早就準(zhǔn)備...
    金有然閱讀 308評論 0 0