本文講述了Android中View跟隨手指滑動(dòng)效果的實(shí)例代碼。分享給大家供大家參考,具體如下:
成都創(chuàng)新互聯(lián)提供高防服務(wù)器租用、云服務(wù)器、香港服務(wù)器、眉山服務(wù)器托管等
1、android View 主要6種滑動(dòng)方法,分別是
2、實(shí)現(xiàn)效果圖
3、自定義中使用layout()方法實(shí)習(xí)view的滑動(dòng)
public class MoveView extends View { private int lastX, lastY; public MoveView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public MoveView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public MoveView(Context context) { super(context); } public boolean onTouchEvent(MotionEvent event) { int x = (int) event.getX(); int y = (int) event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = x; lastY = y; break; case MotionEvent.ACTION_MOVE: int offsetX = x - lastX;//計(jì)算滑動(dòng)的距離 int offsetY = y - lastY; //重新放置新的位置 layout(getLeft() + offsetX, getTop() + offsetY, getRight() + offsetX, getBottom() + offsetY); } return true; } }
2、offsetLeftAndRight()和offsetTopAndBottom()
public boolean onTouchEvent(MotionEvent event) { int x = (int) event.getX(); int y = (int) event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = x; lastY = y; break; case MotionEvent.ACTION_MOVE: int offsetX = x - lastX;//計(jì)算滑動(dòng)的距離 int offsetY = y - lastY; //重新放置新的位置 // layout(getLeft() + offsetX, getTop() + offsetY, getRight() + offsetX, getBottom() + offsetY); offsetLeftAndRight(offsetX); offsetTopAndBottom(offsetY); } return true; }
3、LayoutParams 改變布局參數(shù)的方法:
public boolean onTouchEvent(MotionEvent event) { int x = (int) event.getX(); int y = (int) event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = x; lastY = y; break; case MotionEvent.ACTION_MOVE: int offsetX = x - lastX;//計(jì)算滑動(dòng)的距離 int offsetY = y - lastY; //重新放置新的位置 // layout(getLeft() + offsetX, getTop() + offsetY, getRight() + offsetX, getBottom() + offsetY); // offsetLeftAndRight(offsetX); // offsetTopAndBottom(offsetY); LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) getLayoutParams(); layoutParams.leftMargin = getLeft()+offsetX; layoutParams.topMargin = getTop() +offsetY; setLayoutParams(layoutParams); } return true; }
4、當(dāng)然使用動(dòng)畫 ,scrollBy()和 scrollTo()也可以使view滑動(dòng),不足的是使用scrollBy()和 scrollTo()滑動(dòng)時(shí),是瞬間完成的,用戶體驗(yàn)不太好。
5、Scroller和 View的computeScroll() 結(jié)合使用,實(shí)現(xiàn)view平滑的移動(dòng)
public class MoveView extends View { private Scroller mScroller; public MoveView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); mScroller = new Scroller(context); } public MoveView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public MoveView(Context context) { super(context); } //重寫computeScroll方法 @Override public void computeScroll() { //view在onDraw的時(shí)候會(huì)調(diào)用此方法 super.computeScroll(); if (mScroller.computeScrollOffset()) { ((View) getParent()).scrollTo(mScroller.getCurrX(), mScroller.getCurrY()); invalidate(); } } //在外部調(diào)用這個(gè)方法即可 public void smoothScrollTo(int destX, int destY) { int scrollX = getScrollX(); int delta = destX - scrollX; mScroller.startScroll(scrollX, 0, delta,0 ,6000); invalidate(); } }
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)創(chuàng)新互聯(lián)的支持。