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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产成人精品午夜在线播放 | 视频高清在线观看 | 九九热视频免费 | 亚洲国产视频一区 | 国产成人影院在线观看 | 欧美一区二区三区久久久 | 日本国产成人精品视频 | 美女机机对机机的视频(免费) | 欧美一级特黄特色大片 | 亚洲欧美日韩国产一区图片 | 成人在线免费观看 | 美女尿口羞羞视频 | 精品一区二区国语对白 | 午夜国产精品视频在线 | 亚洲 综合 欧美在线视频 | 摔跤成人黄版 | www一级片 | 日本老师动漫 | 精品一区二区三区在线播放 | 3d欧美人禽交 | 99在线在线视频免费视频观看 | 母性本能| 99er热| 久久三级网站 | 视频在线观看入口一二三2021 | 国内精品久久久久久久久 | 男生操女生的漫画 | 不良网站在线观看 | 亚洲+欧美+国产+综合 | 果冻传媒林予曦图片 | 男人香蕉好大好爽视频 | 天堂在线中文字幕 | 日本高清色视频www 日本高清免费观看 | 好紧好爽再叫浪一点点潘金莲 | 精选国产AV精选一区二区三区 | 99re8在线精品视频免费播放 | 欧美一级欧美三级在线 | 视频在线91 | 精品日产1区2卡三卡麻豆 | 国产亚洲精品美女久久久 | 国产自产一区c |