viewdraghelper

ViewDragHelper学习之九宫格拼图

家住魔仙堡 提交于 2021-02-15 09:36:16
import android.content.Context; import android.support.v4.widget.ViewDragHelper; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.RelativeLayout; /** * Created by alanchen on 15/7/29. */ public class SwipeBackRelativelayout extends RelativeLayout { public static final String TAG = SwipeBackRelativelayout.class.getSimpleName(); private ViewDragHelper mDragHelper; /*通过九个数字来表示空白格的位置 * 1 2 3 * 4 5 6 * 7 8 9*/ private int blank; private int maxLeft; private int maxTop; public SwipeBackRelativelayout(Context

Android ViewDragHelper源码解析

一世执手 提交于 2019-12-27 17:28:51
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在自定义ViewGroup的过程中,如果涉及到View的拖动滑动,ViewDragHelper的使用应该是少不了的,它提供了一系列用于用户拖动子View的辅助方法和相关的状态记录,像Navigation Drawer的边缘滑动、QQ5.x的侧滑菜单、知乎里的页面滑动返回都可以由它实现,所以有必要完全掌握它的使用。 要想完全掌握ViewDragHelper的使用和原理,最好的办法就是读懂它的源码,所以就有了这篇分析,以便在印象模糊之时可以再次快速回顾ViewDragHelper的原理、用法、注意事项等。 基本用法 在自定义ViewGroup的构造方法里调用ViewDragHelper的静态工厂方法create()创建ViewDragHelper实例 实现ViewDragHelper.Callback 最重要的几个方法是tryCaptureView()、clampViewPositionVertical()、clampViewPositionHorizontal()、getViewHorizontalDragRange()、getViewVerticalDragRange() tryCaptureView()里会传递当前触摸区域下的子View实例作为参数,如果需要对当前触摸的子View进行拖拽移动就返回true

ViewDragHelper详解

非 Y 不嫁゛ 提交于 2019-12-27 15:22:23
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 2013年谷歌i/o大会上介绍了两个新的layout: SlidingPaneLayout和DrawerLayout,现在这俩个类被广泛的运用,其实研究他们的源码你会发现这两个类都运用了ViewDragHelper来处理拖动。 ViewDragHelper是framework中不为人知却非常有用的一个工具 。 ViewDragHelper解决了 Android 中手势处理过于复杂的问题,在DrawerLayout出现之前,侧滑菜单都是由第三方开源代码实现的,其中著名的当属 MenuDrawer ,MenuDrawer重写onTouchEvent方法来实现侧滑效果,代码量很大,实现逻辑也需要很大的耐心才能看懂。如果每个开发人员都从这么原始的步奏开始做起,那对于安卓生态是相当不利的。所以说ViewDragHelper等的出现反映了安卓开发框架已经开始向成熟的方向迈进。 本文先介绍ViewDragHelper的基本用法,然后介绍一个能真正体现ViewDragHelper实用性的例子。 其实ViewDragHelper并不是第一个用于分析手势处理的类,gesturedetector也是,但是在和拖动相关的手势分析方面gesturedetector只能说是勉为其难。 关于ViewDragHelper有如下几点:

ViewDragHelper: how to use it?

匿名 (未验证) 提交于 2019-12-03 02:06:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: On the Google IO 2013, Google has announced new version of Support Library, which includes ViewDragHelper class. I saw the docs, but I couldn't find any sample of usage this class. For example, very typical situation: I have custom view, which extends FrameLayout and allows drag some of the View inside. For exmaple, let's it would be Button. I override onTouchEvent() and onInterceptTouchEvent() within my custom view, and if button of the rect contains touch coordinates and this is not simple click, I start drag. So, what I must to do with

Android实现类似QQ的滑动删除效果

混江龙づ霸主 提交于 2019-12-02 13:16:39
观察QQ的滑动删除效果,可以猜测可以滑动删除的部分主要包含两个部分,一个是内容区域(用于放置正常显示的view),另一个是操作区域(用于放置删除按钮)。默认情况下,操作区域是不显示的,内容区域的大小是填充整个容器,操作区域始终位于内容区域的右面。当开始滑动的时候,整个容器中的所有子view都像左滑动,如果操作区域此时是不可见的,设置为可见。 我的实现思路就是自定义一个layout SwipeLayout继承自FrameLayout。SwipeLayout包含两个子view,第一个子view是内容区域,第二个子view是操作区域。滑动效果的控制,主要就是通过检测SwipeLayout的touch事件来实现,这里我不想自己去通过监听touch事件来实现滑动效果,那是一个很繁琐的过程。Android support库里其实已经提供了一个很好的工具类来帮我们做这件事情ViewDragHelper。如果你看过Android原生的DrawerLayout的代码,就会发现DrawerLayout的滑动效果也是通过ViewDragHelper类实现的。 下面先介绍一下ViewDragHelper类的使用。 首先需要在容器中创建一个ViewDragHelper类的对象。 mDragHelper = ViewDragHelper.create(this, 1.0f, new

模仿QQ左滑删除当前会话列表

这一生的挚爱 提交于 2019-12-02 13:11:14
最近无聊,看了很多关于QQ列表侧滑删除的文章和技术文档,结合许多整理一下内容。 侧滑结构如图: 所需填充的数据由“文本”和“删除”2部分组成。代码如下 content.xml <?xml version="1.0" encoding="utf-8"?> < LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:layout_width = "match_parent" android:layout_height = "60dp" android:background = "#97d8da" android:gravity = "center" android:orientation = "vertical" > < TextView android:id = "@+id/Content" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "Text" android:gravity = "center" android:textSize = "24dp" /> </ LinearLayout > delete.xml: <?xml

高仿QQ6.0之侧滑删除

梦想的初衷 提交于 2019-12-02 13:10:26
前两天已经完成了高仿QQ6.0侧滑和优化,今天来看下侧滑删除的实现吧,如果有兴趣,可以去看下之前的两篇, 仿QQ6.0侧滑之ViewDragHelper的使用(一) 和 高仿QQ6.0侧滑菜单之滑动优化(二) ,好了不多说,开始今天的内容了。 如果看过之前的两篇的话,想必今天的很好实现的,我们来分析一下哈,侧滑删除,布局也就是前面一个item,然后有两个隐藏的按钮(TextView也可以),然后我们可以向左侧滑动,然后显示出来,然后对delete(删除键)实现监听,就可以了哈。好了那就来看看代码怎么实现的吧。 首先和之前一样 自定义View,初始化ViewDragHelper: package com.example.removesidepull; import android.content.Context; import android.support.v4.widget.ViewDragHelper; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.FrameLayout; /** * Created by 若兰 on 2016/2/2. * 一个懂得了编程乐趣的小白,希望自己 *

SwipeBackLayout 和SwipeBackActivity最完全解析

情到浓时终转凉″ 提交于 2019-12-02 12:54:45
大屏幕时代的到来,目前大部分的APP都支持侧滑关闭Activity及切换Activity的动画效果,这些效果极大的提高了用户体验。比如苹果的safari中的滑动返回操作。 我也参考了github上面的 ikew0ng/SwipeBackLayout 项目写了一个自己的swipebacklayout。在源码的基础上,添加了一些注释,并没有对源码做出太大改动。 项目github地址: https://github.com/CameloeAnthony/SwipeBackActivity 下面对源码进行学习和分析: (1)使用swipebackActivitity ,如图,只需要继承SwipeBackActivity, 并且注意在manifest文件中定义theme,添加如下属性: (2)来看看swipeBackActivity是怎么实现的: package nsu.edu.com.library; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; /** * all the subClass extends from this class to use swipe-back function */ public class

[android]手把手通过一个类实现侧滑退出activity功能

元气小坏坏 提交于 2019-12-02 12:35:36
1、概述 *本文代码 非原创 来自于 一个 叫做NBAPlus的开源代码中. https://github.com/SilenceDut/NBAPlus 有兴趣的小伙伴们可以好好去了解下,推荐下,真™可以的~ 2、简单描述下,所谓侧滑退出功能便是手指在界面左边或者右边滑动可以执行关闭界面的方法。换咱程序员的说话就是特么的:滑动 activity 执行 finish 方法。 效果图: 2、主要实现方法 通过 ViewDragHelper 来检测到屏幕侧滑,然后通过内置接口传递给 acitivity 触发了侧滑事件,通知其关闭。 额,就是这么简单明了的一句概况了。 来来来代码代码看代码~喵了个巴拉的,具体细节看代码。因为感觉写太多细节的话,我自己都懒得去看。(咳咳……不是我懒不是我懒……嗯的,就是这样。) 3、代码 1、实现侧滑删除,这里的方法是先要创建一个监听侧滑的自定义布局. public class SwipeBackLayout extends FrameLayout { //自定义控件 必备俩个构造函数 public SwipeBackLayout (Context context) { this (context, null ); //引用俩个参数的构造方法,目的是将三个构造方法连接起来. } public SwipeBackLayout (Context context,

滑动退出Activity的两种方法

我只是一个虾纸丫 提交于 2019-12-02 12:34:19
最近遇到需求,需要滑动退出Activity,参考了大虾们的方案后整理出了两种主流的方法: 使用OnTouchEvent,处理触摸事件实现滑动退出 使用ViewDragHelper拖动实现滑动退出 两种方法各有利弊,遇到界面上的滑动或滚动事件产生冲突的需要自己处理,下面就来详细的介绍两种实现方法。 0.前提 两种方法不管使用哪一种都需要设置透明主题及Activity中根布局的background,以实现滑动时,上一个Activity可见。 Activity根布局背景: android:background="?android:colorBackground" Activity主题: <style name="Translucent" parent="AppTheme"> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowAnimationStyle">@android:style/Animation</item> </style> 1.使用OnTouchEvent,处理触摸事件实现滑动退出 先来看看具体实现: /** * @author