最近學(xué)到了overscroller 來做下筆記
參考文章 http://blog.csdn.net/chaoyue0071/article/details/44038641
overscroller 類是個(gè)輔助類发框,主要是計(jì)算當(dāng)前view要移動(dòng)某段距離的當(dāng)前位置徐许,可能這樣說不理解旅赢,先上圖,再解釋
我們移動(dòng)到某個(gè)距離要返回時(shí)检眯,如果此時(shí)要求view返回時(shí)靖苇,這個(gè)時(shí)候overscroller就用到了,他會(huì)自動(dòng)計(jì)算當(dāng)前的距離他會(huì)調(diào)用computeScroll 類,我們可以在這個(gè)里面設(shè)定view的位置丑搔,輕輕松松實(shí)現(xiàn)view的移動(dòng)。
private void init() {
//初始化overscroller類
mScroller = new OverScroller(this.getContext(),new BounceInterpolator());
}
重寫ontouchu方法
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
lastX = event.getRawX();
lastY = event.getRawY();
Log.e("main","dd1d");
break;
case MotionEvent.ACTION_MOVE:
float disX = event.getRawX() - lastX;//得到移動(dòng)的距離
float disY = event.getRawY() - lastY;
/offsetLeftAndRight((int) disX);
offsetTopAndBottom((int) disY);/
this.layout(this.getLeft()+disX,this.getTop()+disY,this.getRight()+disX,this.getBottom()+disY);
lastX = event.getRawX();
lastY = event.getRawY();
Log.e("main","d2dd");
break;
case MotionEvent.ACTION_UP://調(diào)用mscroller的start方法 前兩個(gè)參數(shù)提揍,傳入當(dāng)前的左邊啤月,后兩個(gè)參數(shù)傳入x y移動(dòng)的距離
mScroller.startScroll((int) getX(), (int) getY(), -(int) (getX() - startX), -(int) (getY() - startY));
invalidate();
Log.e("main","dd3d");
break;
}
return true;
}