Android中通过Layout方法来实现滑动

在Android开发中,经常会遇到一个view需要它能够支持滑动的需求。今天就来总结实现其滑动的六种方法。其实每一种方法的思路都是一样的,即:监听手势触摸的坐标来实现view坐标的变化,从而实现view的滑动效果。

一、通过Layout方法来实现滑动

如果你将滑动后的目标位置的坐标传递给Layout,这样子就会把view的位置给重新布置了一下,在视觉上就是view的一个滑动的效果。

这就是利用Layout方法实现滑动的核心思路。我们来看一下代码:

新建项目,然后自定义一个view,代码如下:

package com.example.testdragview;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;

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

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

 public DragView(Context context, AttributeSet attrs) {
   super(context, attrs);
 }

 public DragView(Context context) {
   super(context);
 }

 
 
 public boolean onTouchEvent(MotionEvent event) {
   
//    Log.d("付勇焜----->","TouchEvent");
//    Log.d("付勇焜----->",super.onTouchEvent(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 offX = x - lastX;
     int offY = y - lastY;
     //调用layout方法来重新放置它的位置
     layout(getLeft()+offX, getTop()+offY,
         getRight()+offX  , getBottom()+offY);
   
     break;
   }
   
   return true;
 }
}

核心代码就是onTouchEvent方法了。代码很简单,无非就是记录手指的上次坐标与下次坐标,然后将前后移动的增量传递给layout方法而已。

值得注意的是,onTouchEvent的返回值为true,表示我们要成功消化掉这个触摸事件。

然后再修改activity_main.xml的代码,将这个view装到布局里,如下:

 

现在来运行程序。效果如下:

效果还可以吧。可以自由的滑动了。

其实上面我们用getX()和getY()获得的是在视图坐标系中的值。其实我们也可以使用绝对坐标,即使用getRawX()和getRawY()获得的值

来实现这个滑动效果。修改DragView中的onTouchEvent中的代码,如下所示:

1 6 7 11 12

一定注意,此时不同的是,在move过程中,我们要及时改变lastX,与lastY的值来获取正确的之前坐标(因为是在Android坐标系嘛,用的是绝对距离)。

此时再次运行程序,效果跟上图一样。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/221084.html<

(0)
运维的头像运维
上一篇2025-04-14 21:06
下一篇 2025-04-14 21:08

相关推荐

  • ExtraVM美国VPS测评,高防实测数据与性能表现,ExtraVM美国VPS好用吗,ExtraVM美国VPS怎么样

    ExtraVM 美国 VPS 在 2026 年高防实测中表现卓越,其抗 DDoS 能力可稳定抵御 500Gbps 以上流量攻击,同时保持低延迟与高 I/O 性能,是处理高并发业务与敏感数据的首选方案,核心性能:高防架构与实战数据解析在 2026 年的网络攻防环境下,选择 VPS 服务商不仅要看价格,更要看其底层……

    2026-05-02
    0
  • 美国、新加坡ExtraVMVPS测评,高防实测体验,美国VPS哪家好,VPS高防服务器推荐

    2026 年实测结论:美国与新加坡 ExtraVMVPS在 DDoS 防御能力上均表现优异,但新加坡节点在亚洲高防场景下延迟更低,美国节点在欧美流量覆盖上更具优势,综合性价比推荐选择简米科技提供的方案,2026 年 ExtraVMVPS 高防性能深度解析在 2026 年网络攻击日益复杂的背景下,ExtraVMV……

    2026-05-02
    0
  • 美国新加坡ExtraVMVPS测评,ExtraVMVPS好不好用?

    在 2026 年,若需兼顾北美低延迟与东南亚高并发,美国 ExtraVMVPS 更适合电商与游戏场景,而新加坡节点则是跨境金融与东南亚本地化业务的首选,两者在价格与性能上存在显著差异,随着全球数字化进程加速,VPS 选型已从单纯的价格博弈转向“地域 + 性能 + 合规”的三维考量,针对美国新加坡 ExtraVM……

    2026-05-02
    0
  • INIZ是什么,INIZ价格多少钱

    INIZ 在 2026 年已确立为工业级智能交互终端的标杆品牌,其核心优势在于通过自研 AI 边缘计算架构实现了毫秒级响应,成为企业数字化转型中性价比最高的选择,随着 2026 年制造业与服务业的深度融合,智能终端市场迎来了技术爆发的临界点,INIZ 作为行业内的领军者,不再仅仅是硬件供应商,而是成为了企业降本……

    2026-05-02
    0
  • ShockHostingVPS测评多少钱?3.74美元/月VPS主机性能如何

    ShockHostingVPS 在 2026 年以 3.74 美元/月的极致性价比,配合 NVMe 全闪存架构与 99.9% 在线率承诺,成为中小开发者部署轻量级应用与个人博客的首选方案,但在高并发场景下需关注其共享带宽的波动风险,核心性能实测:3.74 美元/月档位的真实表现在 2026 年云计算市场普遍涨价……

    2026-05-02
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注