丝袜人妻一区二区三区_少妇福利无码视频_亚洲理论片在线观看_一级毛片国产A级片

當(dāng)前位置:首頁 > 民俗文化

velocitytracker 讓控件如此絲滑Scroller和VelocityTracker的API講解與實戰(zhàn)——Android高級UI

今天的免費課程:“安卓通用控件和布局”

課程大綱

課程今天才免費,24小時后恢復(fù)原價

如果想直接學(xué)習(xí)課程,掃碼學(xué)習(xí)

一、前言

在自定義控件中,難免會遇到滑動場景。但是Canvas提供的scrollTo和scrollBy方法只能達到移動的效果。為了實現(xiàn)真正的滑動,我們需要兩個基本的工具,Scroller和VelocityTracker,我們今天分享這兩個工具。照例先去實戰(zhàn)圖,然后分享。

慣性滑動直方圖

但是(敲黑板??!值得注意的是,屏幕外的欄目其實對用戶是不可見的,我們不需要花這部分資源去畫。我們可以通過下面的代碼來判斷列是否在可見區(qū)域,可見區(qū)域的范圍是屏幕的寬度左右擴展一列間隔mBarInterval。這樣做的原因是,當(dāng)所描述的文本或小紅點正好在屏幕的左邊框或右邊框上時,就不會出現(xiàn)未繪制的情況。

/**

*是否在可視范圍內(nèi)

*

* @paramx

* @returntrue:在可見范圍內(nèi);真:不在可見的假

*/

privatebooleanisivisiblearea(float x){

float dx = x-Getscrollx;

return-mBarInterval & lt;= dx &。& ampdx <。= mViewWidth+mBarInterval;

至此,圖像繪制問題解決,代碼沒有粘貼出去,童鞋可以進入門戶,按照思路走了。

還有一個問題,就是如何讓圖片隨手指移動,需要重寫onTouchEvent方法,計算手指的水平移動距離,然后通過scrollBy方法移動內(nèi)容。

值得一提的是,scrollTo和scrollBy方法都是針對移動內(nèi)容或畫布的。

至于如何讓小紅點移動,使用ValueAnimator從零增加到一,從而不斷逼近目標坐標。

3.慣性怎么滑

上一節(jié)結(jié)束后,我們已經(jīng)知道如何繪制這個簡單但常見的柱形圖,但美中不足的是沒有拋尾效果。因此,我們需要借用VelocityTracker來獲取手指當(dāng)前的滑動速度,但這里需要注意的是,最大和最小速度應(yīng)該是有限制的。因為速度太快太慢,會導(dǎo)致交互效果不佳。獲取如下代碼

mmaximumVelocity = ViewConfiguration . get(context)。getScaledMaximumFlingVelocity

mmimumvelocity = view configuration . get(context)。getScaledMinimumFlingVelocity

然后按照我們在VelocityTracker總結(jié)中的套路,得到手指離開屏幕時的水平速度。下面是只保留VelocityTracker相關(guān)代碼

/**

*控制屏幕不跨越邊界

*

* @param事件

* @返回

*/

@覆蓋

public boolean OnTouchEvent(MotionEvent事件){

//省略無關(guān)的代碼...

if(mVelocityTracker == null) {

mvelocity tracker = velocity tracker . get;

}

mVelocityTracker.addMovement(事件);

if(MotionEvent。ACTION_DOWN == event.getAction) {

//省略無關(guān)的代碼...

} elseif(MotionEvent。ACTION_MOVE == event.getAction) {

//省略無關(guān)的代碼...

} elseif(MotionEvent。ACTION_UP == event.getAction) {

//計算當(dāng)前速度,1000表示每秒像素等。

mvelocity tracker . computecurentvelocity(1000,mmaxiumvelocity);

//獲取橫向速度

intvelocity x =(int)mvelocity tracker . getxvelocity;

//速度應(yīng)大于滑動前的最小速度

if(Math.abs(velocityX)>;mmimumvelocity){

//省略無關(guān)的代碼...

}

if(mVelocityTracker!= null) {

mVelocityTracker.recycle

mVelocityTracker = null

}

}

returnsuper.onTouchEvent(事件);

}

在獲得水平速度后,我們需要執(zhí)行真正的投擲效果。用一個線程連續(xù)移動畫布,達到滾動的效果(RecycleView中的滾動也是通過線程實現(xiàn)的,感興趣的同學(xué)可以輸入RecycleView的源代碼來查看。線程類的名字是ViewFlinger)。

/**

*滾絲

*/

private class flinggrunnableimplementsrunnable {

privateScroller mScroller

privateintmInitX

privateintmMinX

privateintmMaxX

privateintmVelocityX

FlingRunnable(上下文上下文){

this . mscroller = NewsCroller(context,null,false);

}

void start(IntintX,

intvelocityX,

intminX,

intmaxX) {

this.mInitX = initX

this . mvelocity x = velocity x;

this.mMinX = minX

this.mMaxX = maxX

//先停止最后一個滾動

if(!mScroller.isFinished) {

mScroller.abortAnimation

}

//開始放縱

mScroller.fling(initX,0,velocityX,

0,0,maxX,0,0);

post(this);

}

@覆蓋

publicvoidrun{

//如果完成了,就不會再進行了

if(!mscroller . computescroloffset){

返回;

}

//計算偏移量

intcurrX = mScroller.getCurrX

int diffx = Minitx-CurX;

//用于記錄是否超出邊界。如果超出邊界,即使?jié)L動沒有完成,也不會進行回調(diào)。

booleanisEnd = false

if(DifX!= 0) {

//超出右邊界,進行修正

if(GetscrollX+DifX > 1;= mCanvasWidth - mViewWidth) {

diffX =(int)(mCanvasWidth-mViewWidth-getScrollX);

isEnd = true

}

//超出左邊界,改正

if(GetscrollX & lt;= 0) {

diffX =-getScrollX;

isEnd = true

}

if(!mScroller.isFinished) {

scrollBy(DifX,0);

}

mInitX = currX

}

if(!isEnd) {

post(this);

}

}

/**

*停止

*/

空隙停止{

if(!mScroller.isFinished) {

mScroller.abortAnimation

}

}

}

最后使用這個線程,使用的地方主要有兩點:一個手指按下時(即MotionEvent。動作向下)和手指抬起時(即運動事件)。ACTION_UP),刪除無關(guān)代碼,剩下的代碼如下。

public boolean OnTouchEvent(MotionEvent事件){

//省略無關(guān)的代碼...

if(MotionEvent。ACTION_DOWN == event.getAction) {

//省略無關(guān)的代碼...

mFling.stop

} elseif(MotionEvent。ACTION_MOVE == event.getAction) {

//省略無關(guān)的代碼...

} elseif(MotionEvent。ACTION_UP == event.getAction) {

//省略無關(guān)的代碼...

//速度應(yīng)大于滑動前的最小速度

if(Math.abs(velocityX)>;mmimumvelocity){

intinitX = getScrollX

int maxx =(int)(mCanvasWidth-mViewWidth);

if(MaxX & gt;0) {

mFling.start(initX,velocityX,initX,maxX);

}

}

//省略無關(guān)的代碼...

}

returnsuper.onTouchEvent(事件);

}

當(dāng)我們移動事件時。action _ down,我們需要停止?jié)L動,以便在手指接觸的地方立即停止。

當(dāng)我們移動事件時。action _ up,我們需要計算fling方法所需的最小值和最大值。根據(jù)我們在線程中的計算方法,我們的最小值和初始值是getScrollX,最大值是mCanvasWidth-mViewWidth。

課程設(shè)計的邏輯

常用Android控件的使用屬于Android開發(fā)的基礎(chǔ)知識,也是每個開始Android開發(fā)的學(xué)生必備的技能。

誰適合學(xué)習(xí)?

具備基本的Java/Android知識想要快速上手,走上Android開發(fā)之路的實習(xí)者

怎么學(xué)?

極客學(xué)院將每天推出一門有限的免費課程,只需兩步就能輕松開始學(xué)習(xí):

注冊極客學(xué)院賬號,開啟學(xué)習(xí)之旅

1.《velocitytracker 讓控件如此絲滑Scroller和VelocityTracker的API講解與實戰(zhàn)——Android高級UI》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點,與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。

2.《velocitytracker 讓控件如此絲滑Scroller和VelocityTracker的API講解與實戰(zhàn)——Android高級UI》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。

3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/guoji/1102473.html

上一篇

以家人之名賀子秋官配是誰 和小橙子秦美央結(jié)局在一起了嗎

下一篇

貴州大山深處連續(xù)多日傳出詭異怪聲 場面神奇引萬人圍觀

喻言被男子摟背怎么回事 喻言5.5事件始末

  • 喻言被男子摟背怎么回事 喻言5.5事件始末
  • 喻言被男子摟背怎么回事 喻言5.5事件始末
  • 喻言被男子摟背怎么回事 喻言5.5事件始末

張顏齊否認抄襲草東 具體事件詳情始末曝光

  • 張顏齊否認抄襲草東 具體事件詳情始末曝光
  • 張顏齊否認抄襲草東 具體事件詳情始末曝光
  • 張顏齊否認抄襲草東 具體事件詳情始末曝光

銀行回應(yīng)新員工不喝酒被打耳光 回顧整場事件詳情始末

  • 銀行回應(yīng)新員工不喝酒被打耳光 回顧整場事件詳情始末
  • 銀行回應(yīng)新員工不喝酒被打耳光 回顧整場事件詳情始末
  • 銀行回應(yīng)新員工不喝酒被打耳光 回顧整場事件詳情始末
山東校長11歲兒子頂替他人入公職 具體事件詳情曝光

山東校長11歲兒子頂替他人入公職 具體事件詳情曝光

從關(guān)縣陳春秀被冒領(lǐng)上大學(xué),到東昌府區(qū)王麗麗被冒領(lǐng)上中專,大家對以權(quán)謀私、弄虛作假的現(xiàn)象表示絕不姑息。模仿可能會改變一個人甚至一個家庭的命運。對換人事件的嚴懲,體現(xiàn)了山東刮骨治病的決心,也將是一場重拾民心的戰(zhàn)斗。7月2日,#...

男生踹傷猥褻女生男子被刑拘 具體事件回顧

  • 男生踹傷猥褻女生男子被刑拘 具體事件回顧
  • 男生踹傷猥褻女生男子被刑拘 具體事件回顧
  • 男生踹傷猥褻女生男子被刑拘 具體事件回顧

山東回應(yīng)查處242起高考冒名頂替事件 這些違法行為大都發(fā)生在2006年

  • 山東回應(yīng)查處242起高考冒名頂替事件 這些違法行為大都發(fā)生在2006年
  • 山東回應(yīng)查處242起高考冒名頂替事件 這些違法行為大都發(fā)生在2006年
  • 山東回應(yīng)查處242起高考冒名頂替事件 這些違法行為大都發(fā)生在2006年
校長之子偽造檔案入公職 校長之子11歲起領(lǐng)國家工資事件始末

校長之子偽造檔案入公職 校長之子11歲起領(lǐng)國家工資事件始末

今天山東菏澤某校長之子被控偽造檔案冒充自己上班,11歲開始領(lǐng)取國家工資。據(jù)新京報@緊急電話報道,牡丹區(qū)應(yīng)急管理部門回應(yīng)稱,冒名頂替的邱志浩因謀職不當(dāng)被“撤職”。此外,他的父親被免去校長職務(wù),并受到黨的紀律處分。自稱是黨的張...

H&M抵制的是棉花? H&M們抵制的是棉花?幕后真相令國人徹底醒悟

H&M抵制的是棉花? H&M們抵制的是棉花?幕后真相令國人徹底醒悟

近來,西方勢力對于中國新疆的造謠抹黑越來越甚,美英歐加對中國發(fā)起制裁,各家西方企業(yè)也積極配合。24日,瑞典服裝品牌H&M半年前發(fā)表在官網(wǎng)上的一份聲明在微博上廣泛傳播。這份聲明稱中國新疆維吾爾自治區(qū)存在少數(shù)民族“強迫勞動”和“宗教歧視”,隨后耐克、阿迪達斯等中國人民熟悉的外國品牌也被曝出同樣存在相關(guān)問題,可謂一石激起千層浪,引發(fā)眾怒。我們對西方國家在政治領(lǐng)域抹黑中國已然習(xí)以為常,但我們不能忍的是,這...