Il dispose vue draggable personnalisé
Création de processus créer personnalisés glisser viewGroup peut instancier viewDragHelper la méthode de rappel prioritaire interne mise en page xml ajoutée
la mise en œuvre du code simple
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;
public class MyRelativeDragLayout extends RelativeLayout {
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) ;
mViewDragHelper = ViewDragHelper. create ( this , new ViewDragHelper. Callback ( ) {
@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;
}
} ) ;
}
@Override
public boolean onInterceptTouchEvent ( MotionEvent ev) {
return mViewDragHelper. shouldInterceptTouchEvent ( ev) ;
}
@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>