自定义可以拖拽的vIEw创建流程
创建自定义 可以拖拽的 vIEwGroup
实例化 vIEwDragHelper
callback 内部方法 重写
xml布局中添加简单的代码实现
package com.fIEld.dragdemo;import androID.content.Context;import androID.util.AttributeSet;import androID.vIEw.MotionEvent;import androID.vIEw.VIEw;import androID.Widget.relativeLayout;import androIDx.annotation.NonNull;import androIDx.customvIEw.Widget.VIEwDragHelper;/** * 1.创建自定义 可以拖拽的 vIEwGroup * 2.实例化 vIEwDragHelper * 3.callback 内部方法 重写 * 4.xml布局中添加 */public class MyrelativeDragLayout extends relativeLayout { //输入 logt 快速生成TAG private static final String TAG = "MyrelativeDragLayout"; // private VIEwDragHelper mVIEwDragHelper; public MyrelativeDragLayout(Context context) { this(context,null); } public MyrelativeDragLayout(Context context, AttributeSet attrs) { this(context, attrs,0); } public MyrelativeDragLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); //实例化拖拽帮助类 1.this -- 当前对象 2.当前对象 内部处理拖拽事件的回调 mVIEwDragHelper = VIEwDragHelper.create(this, new VIEwDragHelper.Callback() { //尝试捕获当前VIEwGroup内部的vIEw,利用多态 获取 child的 ID 如果满足条件 就返回 true,不满足就 返回 false @OverrIDe public boolean tryCaptureVIEw(@NonNull VIEw child, int pointerID) { int ID = child.getID(); if (ID == R.ID.drag_img){ return true; }else { return false; } } //可以垂直拖动的距离 @OverrIDe public int clampVIEwpositionVertical(@NonNull VIEw child, int top, int dy) { return top; } //可以水平拖动的距离 @OverrIDe public int clampVIEwpositionHorizontal(@NonNull VIEw child, int left, int dx) { return left; } }); } //vIEwDragHelper拦截 ev @OverrIDe public boolean onIntercepttouchEvent(MotionEvent ev) { return mVIEwDragHelper.shouldIntercepttouchEvent(ev); } //vIEwDragHelper处理event 一定要返回true @OverrIDe public boolean ontouchEvent(MotionEvent event) { mVIEwDragHelper.processtouchEvent(event); return true; }}
package com.fIEld.dragdemo;import androIDx.appcompat.app.AppCompatActivity;import androID.os.Bundle;public class MainActivity extends AppCompatActivity { @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); }}
<?xml version="1.0" enCoding="utf-8"?><relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:app="http://schemas.androID.com/apk/res-auto" xmlns:tools="http://schemas.androID.com/tools" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" tools:context=".MainActivity"> <!--创建自定义view--> <com.fIEld.dragdemo.MyrelativeDragLayout androID:layout_wIDth="match_parent" androID:layout_height="match_parent"> <ImageVIEw androID:ID="@+ID/drag_img_1" androID:layout_wIDth="100dp" androID:layout_height="100dp" androID:layout_centerInParent="true" androID:src="@color/colorPrimary"/> </com.fIEld.dragdemo.MyrelativeDragLayout></relativeLayout>
总结 以上是内存溢出为你收集整理的Android----ViewDragHelper(自定义拖拽) ---- 之一全部内容,希望文章能够帮你解决Android----ViewDragHelper(自定义拖拽) ---- 之一所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)