ViewDragHelper (一)- 介绍及简单用例(入门篇)

本文介绍了Android的ViewDragHelper,一个用于手势滑动辅助类,简化控件手势处理。通过一个简单的拖拽回弹demo,详细讲解了如何创建并配置ViewDragHelper,包括实例化、事件处理、边界控制和动画效果。文章旨在帮助开发者更好地理解和使用ViewDragHelper。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

随着入Android这个坑的时间越来越长,愈加觉得深入掌握原理以及技术输出的重要性,会使用轮子和造一个好轮子还是有天壤之别的。授人以鱼不如授人以渔,将一些经验分享出来,希望能够让更多的人更加深入地理解它,并帮助到有需要的朋友。本系列分为三篇,会由浅至深地对DrageHelper 进行详细讲解。

目录

ViewDragHelper 的介绍以及初步使用请阅读这篇:
ViewDragHelper (一)- 介绍及简单用例(入门篇)
ViewDragHelper 的源码以及Callback的详情介绍请阅读这篇:
ViewDragHelper (二)- 源码及原理解读(进阶篇)
利用DrageHelper 打造仿陌陌APP视频播放页的demo请阅读这篇:
ViewDragHelper (三)- 打造仿陌陌视频播放页(深入篇)

介绍:

首先简单看一下它的官方解释:

ViewDragHelper is a utility class for writing custom ViewGroups. It offers a number
of useful operations and state tracking for allowing a user to drag and reposition
views within their parent ViewGroup.

ViewDragHelper 它是Google官方推出的手势滑动辅助类,极大程度地简化了我们对控件的手势滑动跟踪及处理。让我们能够更加便捷地开发自定义ViewGroup控件,实现拖拽以及弹性滚动等功能。事实上,官方的SlidingPaneLayout和DrawerLayout都是利用ViewDragHelper实现的。掌握它,可以一定程度地减轻我们开发工作难度以及投入精力。

使用入门示例

接下来,我们主要通过一个简单的拖拽以及回弹的demo(类似于QQ空间视频播放页),来讲解如何利用DrageHelper 打造一个 ViewGroup 控件。

QQ空间视频播放页效果图:

QZone.gif

大致步骤如下:

第一步:

创建一个DraggableView类继承自ViewGroup(或者也可用 FrameLayout , RelativeLayout, LinearLayout等)。

package com.test.demo;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.widget.ViewDragHelper;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.RelativeLayout;

/**
 * Created by 小嵩 on 2017/9/10.
 */

public class MyDraggableView extends RelativeLayout{
   


    private ViewDragHelper viewDragHelper;

    public MyDraggableView(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        initView();
    }

    private void initView() {
        viewDragHelper = ViewDragHelper.create(this, 1.0f, new DraggableViewCallback(this));
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return viewDragHelper.shouldInterceptTouchEvent(ev);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        viewDragHelper.processTouchEvent(event);
        return true;
    }
}

在onInterceptTouchEvent方法中,通过viewDragHelper.shouldInterceptTouchEvent(event)来决定我们是否应该拦截当前的事件,如果返回的是True,则会触发onTouchEvent。
在onTouchEvent方法中,通过viewDragHelper.proce

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值