一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - Android中View跟隨手指滑動效果的實例代碼

Android中View跟隨手指滑動效果的實例代碼

2022-02-21 15:44meetings Android

這篇文章主要介紹了Android中View跟隨手指滑動效果的實例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

本文講述了Android中View跟隨手指滑動效果的實例代碼。分享給大家供大家參考,具體如下:

1、android View 主要6種滑動方法,分別是

  • layout()
  • offsetLeftAndRight()和offsetTopAndBottom()
  • LayoutParams
  • scrollBy()和 scrollTo()
  • Scroller
  • 動畫

2、實現效果圖

Android中View跟隨手指滑動效果的實例代碼

3、自定義中使用layout()方法實習view的滑動

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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()

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 改變布局參數的方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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、當然使用動畫 ,scrollBy()和 scrollTo()也可以使view滑動,不足的是使用scrollBy()和 scrollTo()滑動時,是瞬間完成的,用戶體驗不太好。

5、Scroller和 View的computeScroll() 結合使用,實現view平滑的移動

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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的時候會調用此方法
 super.computeScroll();
 if (mScroller.computeScrollOffset()) {
 ((View) getParent()).scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
 invalidate();
 }
 }
 //在外部調用這個方法即可
 public void smoothScrollTo(int destX, int destY) {
 int scrollX = getScrollX();
 int delta = destX - scrollX;
 mScroller.startScroll(scrollX, 0, delta,0 ,6000);
 invalidate();
 }
}

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://blog.csdn.net/meetings/article/details/79390275

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99视频全部免费 | 久久综合久久伊人 | 91高清在线视频 | 毛片视频网站在线观看 | 色人阁图片 | 亚洲国产成人久久77 | 亚洲高清中文字幕精品不卡 | 亚洲成人看片 | 久久人妻少妇嫩草AV无码 | 韩国三级在线播放 | 亚洲激情欧美 | 大香线一本 | 欧美成人一区二区三区 | 欧美精品国产一区二区 | 成人影院在线观看 | 乌克兰肥熟 | 超级乱淫1| 国产成+人+综合+亚洲不卡 | 日本高清中文字幕一区二区三区 | 亚洲精品老司机福利在线播放 | 91se精品免费观看 | 欧美人禽杂交av片 | 精品湿| 美女扒开尿口让男生添 漫画 | 亚洲欧美国产在线 | 欧美日韩亚洲一区二区三区在线观看 | 青草悠悠视频在线观看 | 日韩在线免费播放 | 成人影院免费在线观看 | 国产一区二区播放 | 免费国产之a视频 | 久久毛片视频 | 日本剧情片在线播放中文版 | 免费观看大片毛片 | 国产视频久久 | 日本视频在线观看播放 | 人人斗地主 | 色哟哟久久 | 天堂资源在线www中文 | 波多野结衣在线中文 | 无人区在线观看免费完整版免费 |