本文讲述了Android中View跟随手指滑动效果的实例代码。分享给大家供大家参考,具体如下:

1、android View 主要6种滑动方法,分别是

  • layout()
  • offsetLeftAndRight()和offsetTopAndBottom()
  • LayoutParams
  • scrollBy()和 scrollTo()
  • Scroller
  • 动画

2、实现效果图

3、自定义中使用layout()方法实习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 改变布局参数的方法:

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平滑的移动

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();  } }

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

更多相关文章

  1. runOnUiThread()方法
  2. Android欢迎界面的创建方法
  3. Android(安卓)之 getSharedPreferences 和 getPreferences
  4. 【Android(安卓)UI】案例03滑动切换效果的实现(ViewPager)
  5. Android(安卓)Camera CameraHal.cpp 初始化分析
  6. Android开发学习之WallPaper设置壁纸详细介绍与实例
  7. “The project cannot be built until build path errors are re
  8. Android中的Menu的简介(翻译自官方文档)——————个人笔记
  9. 自定义ViewGroup实现瀑布流效果

随机推荐

  1. android 去掉顶部状态栏
  2. Android相对布局属性全集
  3. android:screenOrientation属性
  4. 文字跑马灯
  5. Android 9.0 Launcher源码分析(三)——Laun
  6. android button 正常状态,按下状态
  7. BitmapFactory.Options学习笔记
  8. Android的Context简介
  9. Android中的一些开关
  10. Android Studio之安卓学习布局管理器