Scrollview回彈效果自定義控制項

2022-04-01 02:17:20 字數 1904 閱讀 1329

滾動回彈效果分析:

首先,建立乙個類,繼承scrollview,重寫ontouch事件,實現伸縮回彈效果。

scroollview節點下只能有乙個子節點,這個子節點就是我們要移動的view布局。

第一步:獲取要操作的子view布局

第二步:重寫ontouch事件監聽

分析具體事件:

觀察分析得出結論:

讓布局移動每一次拉動的y軸一半的距離,然後鬆手滾動[攜帶動畫]回到原來的位置。

下拉或者上拉的時候,記錄按下時的y軸位置

action_down

移動過程中的處理:

計算上一次與本次的y軸(拉動距離)[而不是按下時候的y值,和現在移動到的y值,是每上一次和本次的y值比較

判斷是否需要移動布局的情況:y軸的乙個距離偏移

//2種情況,隨著布局的拖動, inner.getmeasuredheight()的值是變化的

與getheight()的區別:

當螢幕可以包裹內容的時候,他們的值相等

當view的高度超出螢幕時,getmeasuredheight()是實際view的大小,與螢幕無關,getheight的大小此時則是螢幕的大小。

此時,getmeasuredheight() = getheight+超出部分。

抬起的處理:布局回滾到正常位置

移動動畫回滾到正常位置(*:動畫執行期間,不允許拖拉操作)   

距離:-的滾動距離

public class myscrollview extends scrollview 

public myscrollview(context context, attributeset attrs)

public myscrollview(context context, attributeset attrs, int defstyleattr)

@override

protected void onfinishinflate()

}@override

public boolean ontouchevent(motionevent ev) else

return super.ontouchevent(ev);

}/**

* 自定義touch事件處理

** @param ev

*/private void commontouchevent(motionevent ev)

innerview.layout(innerview.getleft(), innerview.gettop() - detaily / 2, innerview.getright(), innerview.getbottom() - detaily / 2);

}break;

case motionevent.action_up:

y = 0;

//布局回滾到原來的位置

if (isneedanimation())

break;}}

}private void animation()

@override

public void onanimationend(animation animation)

@override

public void onanimationrepeat(animation animation)

});innerview.startanimation(ta);

}/**

* 判斷是否需要回滾

** @return

*/private boolean isneedanimation()

/*** 判斷是否需要移動

** @return

*/private boolean isneedmove()

return false;

}}

自定義具有回彈效果的ScrollView

專案中需要具有回彈效果的scrollview,可設定最大拖動距離,實現回彈效果。可以用來解決與子布局中的onclick事件衝突問題。override public boolean canscrollvertically int direction public class springbackscr...

簡單的回彈效果

這個主要是垂直方向的,如果需要左右的,修改下y為x即可。import android.content.context import android.graphics.rect import android.util.attributeset import android.view.motioneve...

Flash氣泡回彈效果

好久沒有碰過flash了,今天溫習一下as3.0,做了乙個回彈效果,氣泡回彈 本想著怎麼可以定義氣泡的不同顏色,這樣可以做出更絢麗的效果,或者更進步一,氣泡和氣泡直接回彈,想了老半天沒有想出來,就先這樣,等有更好的方案時候在更新 效果 as package private function init...