Scroller(觸摸滑屏)

  • 什么是Scroller?

    • 翻譯為彈性滑動(dòng)對(duì)象,可以實(shí)現(xiàn)View的彈性滑動(dòng)動(dòng)畫,與Scroller相關(guān)的就是大家比較熟悉的scrollTo和scrollBy方法卑笨,可以用來(lái)實(shí)現(xiàn)View的滑動(dòng),但是它們的缺點(diǎn)就是瞬間完成仑撞,無(wú)法很平滑地過(guò)渡赤兴,而Scroller可以幫助我們很平滑地進(jìn)行彈性滑動(dòng)。
  • Scroller類的介紹

    • 我們知道想把一個(gè)View偏移至指定坐標(biāo)(x,y)處隧哮,利用scrollTo()方法直接調(diào)用就OK了桶良,但我們不能忽視的是,該方法本身
      來(lái)的的副作用:非常迅速的將View/ViewGroup偏移至目標(biāo)點(diǎn)沮翔,而沒(méi)有對(duì)這個(gè)偏移過(guò)程有任何控制艺普,對(duì)用戶而言可能是不太友好的。于是鉴竭,基于這種偏移控制歧譬,Scroller類被設(shè)計(jì)出來(lái)了,該類的主要作用是為偏移過(guò)程制定一定的控制流程(后面我們知道的更多)搏存,從而使偏移更流暢瑰步,更完美。
  • DIYView.java(自定義View)

public class DIYView extends LinearLayout{

     // 創(chuàng)建一個(gè)Scroller
    private Scroller mScroller;

    public DIYView(Context context)
    {
        this(context, null);
    }
    // 1璧眠、創(chuàng)建Scroller
    public DIYView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        mScroller = new Scroller(context);
    }

    // 2缩焦、觸摸回調(diào),每次X軸方向加100责静,然后調(diào)用smoothScrollTo
    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        int disX = mScroller.getFinalX() + 100;

        Log.e("===============", "onTouchEvent");
        smoothScrollTo(disX, 0);
        return super.onTouchEvent(event);
    }

    // 3袁滥、根據(jù)坐標(biāo)差 調(diào)用smoothScrollBy
    public void smoothScrollTo(int fx, int fy)
    {
        int dx = fx - mScroller.getFinalX();
        int dy = fy - mScroller.getFinalY();
        smoothScrollBy(dx, dy);
    }

    // 4、調(diào)用startScroll設(shè)置坐標(biāo)灾螃,然后invalidate重繪
    public void smoothScrollBy(int dx, int dy)
    {

        // 參數(shù)一:startX 參數(shù)二:startY為開(kāi)始滾動(dòng)的位置题翻,dx,dy為滾動(dòng)的偏移量, 1500ms為完成滾動(dòng)的時(shí)間
        mScroller.startScroll(mScroller.getFinalX(), mScroller.getFinalY(), dx,
                dy, 3000);
        //調(diào)用這個(gè)函數(shù)后會(huì)刷新整個(gè)矩形客戶區(qū),或者部分指定的客戶區(qū),區(qū)域?qū)?huì)重繪
        invalidate();
    }

    // 5、重繪過(guò)程會(huì)調(diào)用computeScroll 真正調(diào)用scrollTo進(jìn)行滾動(dòng) 然后再進(jìn)行重繪
    @Override
    public void computeScroll()
    {

        // 判斷滾動(dòng)是否完成 true就是未完成
        if (mScroller.computeScrollOffset())
        {
            scrollTo(mScroller.getCurrX(), mScroller.getCurrY());

            // 本案例中 調(diào)用postInvalidate和invalidate都可以
            invalidate();
        }
        super.computeScroll();
    }
}

  • 布局文件

<com.example.scrollerview.DIYView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#f0ece0" >

    <!-- 提示文本 -->

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#d8a89a"
        android:gravity="center"
        android:text="請(qǐng)向左滑動(dòng)"
        android:textSize="30sp" />

</com.example.scrollerview.DIYView>
  • 主Activity不需進(jìn)行任何改動(dòng)

  • 演示

Scroller.gif
  • 摘自親愛(ài)的輔導(dǎo)員(yungfan)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腰鬼,一起剝皮案震驚了整個(gè)濱河市嵌赠,隨后出現(xiàn)的幾起案子塑荒,更是在濱河造成了極大的恐慌,老刑警劉巖姜挺,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件齿税,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡炊豪,警方通過(guò)查閱死者的電腦和手機(jī)凌箕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)词渤,“玉大人牵舱,你說(shuō)我怎么就攤上這事∫蠢撸” “怎么了仆葡?”我有些...
    開(kāi)封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵赏参,是天一觀的道長(zhǎng)志笼。 經(jīng)常有香客問(wèn)我,道長(zhǎng)把篓,這世上最難降的妖魔是什么纫溃? 我笑而不...
    開(kāi)封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮韧掩,結(jié)果婚禮上紊浩,老公的妹妹穿的比我還像新娘。我一直安慰自己疗锐,他們只是感情好坊谁,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著滑臊,像睡著了一般口芍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上雇卷,一...
    開(kāi)封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天鬓椭,我揣著相機(jī)與錄音,去河邊找鬼关划。 笑死小染,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贮折。 我是一名探鬼主播裤翩,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼调榄!你這毒婦竟也來(lái)了岛都?” 一聲冷哼從身側(cè)響起律姨,我...
    開(kāi)封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎臼疫,沒(méi)想到半個(gè)月后择份,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烫堤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年荣赶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸽斟。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拔创,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出富蓄,到底是詐尸還是另有隱情剩燥,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布立倍,位于F島的核電站灭红,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏口注。R本人自食惡果不足惜变擒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寝志。 院中可真熱鬧娇斑,春花似錦、人聲如沸材部。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)乐导。三九已至苦丁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間兽叮,已是汗流浹背芬骄。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鹦聪,地道東北人账阻。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像泽本,于是被迫代替她去往敵國(guó)和親淘太。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

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

  • 什么是View View 是 Android 中所有控件的基類。 View的位置參數(shù) View 的位置由它的四個(gè)頂...
    acc8226閱讀 1,154評(píng)論 0 7
  • 內(nèi)容是博主照著書敲出來(lái)的蒲牧,博主碼字挺辛苦的撇贺,轉(zhuǎn)載請(qǐng)注明出處,后序內(nèi)容陸續(xù)會(huì)碼出冰抢。 當(dāng)了解了Android坐標(biāo)系和觸...
    Blankj閱讀 6,632評(píng)論 3 61
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,796評(píng)論 25 707
  • 我有時(shí)不懂自己 我也開(kāi)始不去理會(huì)自己 找到讓自己適應(yīng)的活法并快樂(lè)進(jìn)行下去 不喜過(guò)于迅速的親密 不善繁瑣的交際盤旋 ...
    卷主閱讀 190評(píng)論 0 0
  • 下班回來(lái)12點(diǎn)了松嘶,華為工作時(shí)間為996,我工作時(shí)間不定挎扰,大概8 11 6.5 翠订。一回家,我再一次去思考如何去面對(duì)死...
    梁十本閱讀 459評(píng)論 0 1