iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android实现View滑动效果的6种方法
  • 481
分享到

Android实现View滑动效果的6种方法

2024-04-02 19:04:59 481人浏览 泡泡鱼
摘要

本文实例为大家分享了Android实现View滑动效果的具体代码,供大家参考,具体内容如下 一、View的滑动简介 View的滑动是Android实现自定义控件的基础,同时在开发中我

本文实例为大家分享了Android实现View滑动效果的具体代码,供大家参考,具体内容如下

一、View的滑动简介

View的滑动是Android实现自定义控件的基础,同时在开发中我们也难免会遇到View的滑动的处理。其实不管是那种滑动的方式基本思想都是类似的:当触摸事件传到View时,系统记下触摸点的坐标,手指移动时系统记下移动后的触摸的坐标并算出偏移量,并通过偏移量来修改View的坐标。

实现View滑动有很多种方法,这篇文章主要讲解六种滑动的方法,分别是:layout()、offsetLeftAndRight()与offsetTopAndBottom()、LayoutParams、动画、scollTo与scollBy和Scroller;在下一篇文章我们会详细介绍属性动画。

二、实现View滑动的六种方法

2.1 layout()

view进行绘制的时候会调用onLayout()方法来设置显示的位置,因此我们同样也可以通过修改View的left、top、right、bottom这四种属性来控制View的坐标。首先我们要自定义一个View,在onTouchEvent()方法中获取触摸点的坐标:


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;

接下来我们在ACTION_MOVE事件中计算偏移量,再调用layout()方法重新放置这个自定义View的位置就好了:


case MotionEvent.ACTION_MOVE:
 //计算移动的距离
 int offsetX = x - lastX;
 int offsetY = y - lastY;
 //调用layout方法来重新放置它的位置
 layout(getLeft()+offsetX, getTop()+offsetY,
  getRight()+offsetX , getBottom()+offsetY);
 break;

当我们每次移动时都会调用layout()方法来对自己重新布局,从而达到移动View的效果。

自定义View的全部代码(CustomView.java):


package com.example.liuwangshu.moonviewslide;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class CustomView extends View {
 private int lastX;
 private int lastY;

 public CustomView(Context context, AttributeSet attrs, int defStyleAttr) {
 super(context, attrs, defStyleAttr);
 }
 public CustomView(Context context, AttributeSet attrs) {
 super(context, attrs);
 }

 public CustomView(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方法来重新放置它的位置
  layout(getLeft()+offsetX, getTop()+offsetY,
   getRight()+offsetX , getBottom()+offsetY);
  break;
 }

 return true;
 }
}

布局中引用自定义View:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="Http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical">

 <com.example.liuwangshu.moonviewslide.CustomView
 android:id="@+id/customview"
 android:layout_width="80dp"
 android:layout_height="80dp"
 android:layout_margin="50dp"
 android:background="@android:color/holo_red_light" />
</LinearLayout>

2.2 offsetLeftAndRight()与offsetTopAndBottom()

这两种方法和layout()方法效果方法差不多,使用也差不多,我们将ACTION_MOVE中的代码替换成如下代码:


case MotionEvent.ACTION_MOVE:
 //计算移动的距离
 int offsetX = x - lastX;
 int offsetY = y - lastY;
 //对left和right进行偏移
 offsetLeftAndRight(offsetX);
 //对top和bottom进行偏移
 offsetTopAndBottom(offsetY);
 break;

2.3 LayoutParams(改变布局参数)

LayoutParams主要保存了一个View的布局参数,因此我们可以通过LayoutParams来改变View的布局的参数从而达到了改变View的位置的效果。同样的我们将ACTION_MOVE中的代码替换成如下代码:


LinearLayout.LayoutParams layoutParams= (LinearLayout.LayoutParams) getLayoutParams();
  layoutParams.leftMargin = getLeft() + offsetX;
  layoutParams.topMargin = getTop() + offsetY;
  setLayoutParams(layoutParams);

因为父控件是LinearLayout,所以我们用了LinearLayout.LayoutParams,如果父控件是RelativeLayout则要使用RelativeLayout.LayoutParams。除了使用布局的LayoutParams外,我们还可以用ViewGroup.MarginLayoutParams来实现:


ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) getLayoutParams();
layoutParams.leftMargin = getLeft() + offsetX;
layoutParams.topMargin = getTop() + offsetY;
setLayoutParams(layoutParams);

2.4 动画

可以采用View动画来移动,在res目录新建anim文件夹并创建translate.xml:


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
 <translate android:fromXDelta="0" android:toXDelta="300" android:duration="1000"/>
</set>

在Java代码中引用:


mCustomView.setAnimation(AnimationUtils.loadAnimation(this, R.anim.translate));

当然使用属性动画移动那就更简单了,我们让CustomView在1000毫秒内沿着X轴像右平移300像素:


ObjectAnimator.ofFloat(mCustomView,"translationX",0,300).setDuration(1000).start();

2.5 scollTo与scollBy

scollTo(x,y)表示移动到一个具体的坐标点,而scollBy(dx,dy)则表示移动的增量为dx、dy。其中scollBy最终也是要调用scollTo的。scollTo、scollBy移动的是View的内容,如果在ViewGroup中使用则是移动他所有的子View。我们将ACTION_MOVE中的代码替换成如下代码:


((View)getParent()).scrollBy(-offsetX,-offsetY);

这里要实现CustomView随着我们手指移动的效果的话,我们就需要将偏移量设置为负值。

2.6 Scroller

我们用scollTo/scollBy方法来进行滑动时,这个过程是瞬间完成的,所以用户体验不大好。这里我们可以使用Scroller来实现有过度效果的滑动,这个过程不是瞬间完成的,而是在一定的时间间隔完成的。Scroller本身是不能实现View的滑动的,它需要配合View的computeScroll()方法才能弹性滑动的效果。
在这里我们实现CustomView平滑的向右移动。

首先我们要初始化Scroller:


public CustomView(Context context, AttributeSet attrs) {
 super(context, attrs);
 mScroller = new Scroller(context);
 }

接下来重写computeScroll()方法,系统会在绘制View的时候在draw()方法中调用该方法,这个方法中我们调用父类的scrollTo()方法并通过Scroller来不断获取当前的滚动值,每滑动一小段距离我们就调用invalidate()方法不断的进行重绘,重绘就会调用computeScroll()方法,这样我们就通过不断的移动一个小的距离并连贯起来就实现了平滑移动的效果:


@Override
public void computeScroll() {
 super.computeScroll();
 if(mScroller.computeScrollOffset()){
 ((View) getParent()).scrollTo(mScroller.getCurrX(),mScroller.getCurrY());
  //通过不断的重绘不断的调用computeScroll方法
  invalidate();
 } 
}

调用Scroller.startScroll()方法。我们在CustomView中写一个smoothScrollTo()方法,调用Scroller.startScroll()方法,在2000毫秒内沿X轴平移delta像素:


public void smoothScrollTo(int destX,int destY){
 int scrollX=getScrollX();
 int delta=destX-scrollX;
 //1000秒内滑向destX
 mScroller.startScroll(scrollX,0,delta,0,2000);
 invalidate();
 }

最后我们在ViewSlideactivity.java中调用CustomView的smoothScrollTo()方法


//使用Scroll来进行平滑移动
mCustomView.smoothScrollTo(-400,0);

这里我们是设定CustomView沿着X轴向右平移400像素。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Android实现View滑动效果的6种方法

本文链接: https://www.lsjlt.com/news/122689.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android实现View滑动效果的6种方法
    本文实例为大家分享了Android实现View滑动效果的具体代码,供大家参考,具体内容如下 一、View的滑动简介 View的滑动是Android实现自定义控件的基础,同时在开发中我...
    99+
    2024-04-02
  • Android实现View滑动的6种方式
    本文实例为大家分享了Android实现View滑动的具体方法,供大家参考,具体内容如下1.View的滑动简介View的滑动是Android实现自定义控件的基础,同时在开发中我们也难免会遇到View的滑动的处理。其实不管是那种滑动的方式基本思...
    99+
    2023-05-31
    android view 滑动
  • Android如何实现View滑动效果
    这篇文章给大家分享的是有关Android如何实现View滑动效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、View的滑动简介View的滑动是Android实现自定义控件的基础,同时在开发中我们也难免会遇到...
    99+
    2023-06-14
  • Android自定义view实现滑动解锁效果
    本文实例为大家分享了Android自定义view实现滑动解锁的具体代码,供大家参考,具体内容如下 1. 需求如下: 近期需要做一个类似屏幕滑动解锁的功能,右划开始,左划暂停。 2. ...
    99+
    2024-04-02
  • Android自定View实现滑动验证效果的代码
    效果图 自定义属性代码 <?xml version="1.0" encoding="utf-8"?> <resources> &...
    99+
    2024-04-02
  • Android如何自定View实现滑动验证效果
    本篇内容主要讲解“Android如何自定View实现滑动验证效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android如何自定View实现滑动验证效果”吧!效果图自定义属性代码<xm...
    99+
    2023-06-22
  • Android view如何实现滑动悬浮固定效果
    这篇文章主要介绍了Android view如何实现滑动悬浮固定效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.背景在项目开发过程中,有时候会碰到这样的需求:在滑动的过程...
    99+
    2023-05-30
    android
  • Android中怎么实现view随触碰滑动效果
    Android中怎么实现view随触碰滑动效果,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。布局文件里面就是一个Relativelayout中有一个ImageView。如下...
    99+
    2023-05-30
    android view
  • Android自定义View实现竖向滑动回弹效果
    本文实例为大家分享了Android自定义View实现滑动回弹的具体代码,供大家参考,具体内容如下 前言 Android 页面滑动的时候的回弹效果 一、关键代码 public clas...
    99+
    2024-04-02
  • Android实现平滑翻动效果
    本文实例为大家分享了Android实现平滑翻动效果的具体代码,供大家参考,具体内容如下 效果 1.activity加implements implements GestureD...
    99+
    2024-04-02
  • Android怎么自定义View实现竖向滑动回弹效果
    这篇文章主要介绍“Android怎么自定义View实现竖向滑动回弹效果”,在日常操作中,相信很多人在Android怎么自定义View实现竖向滑动回弹效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Andro...
    99+
    2023-06-30
  • Android 实现滑动的六种方式
    目录1、效果视频2、剖析Android坐标系3、实现方式3.1 layout3.2 scrollBy3.3 offsetLeftAndRight offsetTopAndButton...
    99+
    2024-04-02
  • Android实现三段式滑动效果
    目录高德的效果:高德的效果: 实现的效果: 我们实现的效果和高德差距不是很大,也很顺滑。具体实现其实就是集成CoordinatorLayout.Behavior publi...
    99+
    2024-04-02
  • Android Scroller实现弹性滑动效果
    本文实例为大家分享了Android Scroller实现弹性滑动的具体代码,供大家参考,具体内容如下 首先看下实现效果,可以看到当我们手指松开时图片会逐渐滑动到初始位置,而不是直接跳...
    99+
    2024-04-02
  • 怎么在android中使用View实现一个滑动删除效果
    这篇文章给大家介绍怎么在android中使用View实现一个滑动删除效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。实现功能可以向左滑动,右侧出现删除2、向左滑动如果删除出现一大半,松手打开删除,反之关闭删除3、应用...
    99+
    2023-05-31
    android view roi
  • Android实现探探图片滑动效果
    之前一段时间,在朋友的推荐下,玩了探探这一款软件,初玩的时候,就发现,这款软件与一般的社交软件如陌陌之类的大相径庭,让我耳目一新,特别是探探里关于图片滑动操作让人觉得非常新鲜。所以在下通过网上之前的前辈的经历加上自己的理解,也来涉涉水。下面...
    99+
    2023-05-31
    android 图片滑动 roi
  • 怎么在Android中通过自定义view实现滑动解锁效果
    怎么在Android中通过自定义view实现滑动解锁效果?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。自定义view如下@SuppressLint("Clicka...
    99+
    2023-06-15
  • Android如何实现平滑翻动效果
    这篇文章给大家分享的是有关Android如何实现平滑翻动效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下效果activity加implementsimplements GestureDet...
    99+
    2023-06-14
  • vue移动端实现手指滑动效果的方法
    本篇内容主要讲解“vue移动端实现手指滑动效果的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue移动端实现手指滑动效果的方法”吧!本文实例为大家分享了vue移动端实现手指滑动效果的具体代...
    99+
    2023-06-20
  • Android实现手势滑动和简单动画效果
    一、手势滑动Activity都具有响应触摸事件,也就是说只要触摸Activity,他都会回调一个onTouchEvent()方法。但是在这个方法里无法处理事件,需要配合使用手势识别器(GestureDetector)中的方法onTouchE...
    99+
    2023-05-31
    android 手势滑动 roi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作