Android中View跟隨手指滑動效果的實例代碼
本文講述了Android中View跟隨手指滑動效果的實例代碼。分享給大家供大家參考,具體如下:
1、android View 主要6種滑動方法,分別是
- layout()
- offsetLeftAndRight()和offsetTopAndBottom()
- LayoutParams
- scrollBy()和 scrollTo()
- Scroller
- 動畫
2、實現(xiàn)效果圖

3、自定義中使用layout()方法實習(xí)view的滑動
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;//計算滑動的距離
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;//計算滑動的距離
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;//計算滑動的距離
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)然使用動畫 ,scrollBy()和 scrollTo()也可以使view滑動,不足的是使用scrollBy()和 scrollTo()滑動時,是瞬間完成的,用戶體驗不太好。
5、Scroller和 View的computeScroll() 結(jié)合使用,實現(xiàn)view平滑的移動
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的時候會調(diào)用此方法
super.computeScroll();
if (mScroller.computeScrollOffset()) {
((View) getParent()).scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
invalidate();
}
}
//在外部調(diào)用這個方法即可
public void smoothScrollTo(int destX, int destY) {
int scrollX = getScrollX();
int delta = destX - scrollX;
mScroller.startScroll(scrollX, 0, delta,0 ,6000);
invalidate();
}
}
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Android BottomSheet實現(xiàn)可拉伸控件
這篇文章主要為大家詳細(xì)介紹了Android BottomSheet實現(xiàn)可拉伸控件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11
Android開發(fā)中的幾種網(wǎng)絡(luò)請求方式詳解
本篇文章主要包括Android中的幾種網(wǎng)絡(luò)請求方式詳解,具有一定的參考價值,有需要的可以了解一下。2016-11-11
Kotlin基礎(chǔ)學(xué)習(xí)之循環(huán)和異常
最近在學(xué)習(xí)kotlin,Kotlin 是一個基于 JVM 的新的編程語言,下面這篇文章主要給大家介紹了關(guān)于Kotlin基礎(chǔ)學(xué)習(xí)之循環(huán)和異常的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-12-12
Google 開發(fā)Android MVP架構(gòu)Demo深入解析
這篇文章主要為大家介紹了Google 開發(fā)Android MVP架構(gòu)Demo深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
Android自定義鍵盤的實現(xiàn)(數(shù)字鍵盤和字母鍵盤)
本篇文章主要介紹了Android自定義鍵盤的實現(xiàn)(數(shù)字鍵盤和字母鍵盤),具有一定的參考價值,有興趣的可以了解一下2017-08-08

