您的位置:首页 > 移动开发 > Android开发

Android 拖拽操作demo

2017-11-09 15:29 141 查看

记录一下Android 拖拽的小demo

官网(https://developer.android.com/guide/topics/ui/drag-drop.html)对拖拽的说明已经很详细了,可以在官网对它了解。

自己实现了一下将拖拽后的阴影 改变成自定义的小图片,当拖拽时影藏了View。

直接上代码:

package com.example.myapplication;

import android.app.Activity;
import android.content.ClipData;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.util.Log;
import android.view.DragEvent;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;

/**
* 拖拽操作
*/

public class TestDrogActivity extends Activity {
private static final String TAG = "TestDrogActivity";

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

FrameLayout container = new FrameLayout(this);
final TextView textView = new TextView(this);
textView.setBackgroundColor(Color.CYAN);
textView.setText("test drag");
textView.setTextSize(20);
FrameLayout.LayoutParams flk = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
flk.gravity = Gravity.CENTER;
container.addView(textView,flk);

textView.setOnLongClickListener(new View.OnLongClickListener() {
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public boolean onLongClick(View v) {
textView.startDragAndDrop(null,new MyDrogBuild(v),v,0);
return true;
}
});

textView.setOnDragListener(new View.OnDragListener() {
@Override
public boolean onDrag(View v, DragEvent event) {
int action = event.getAction();
switch (action){
case DragEvent.ACTION_DRAG_STARTED:
v.invalidate();
Log.d(TAG,"ACTION_DRAG_STARTED...");
return true;
case DragEvent.ACTION_DROP:
v.invalidate();
Log.d(TAG,"ACTION_DROP...");
return true;
4000

case DragEvent.ACTION_DRAG_ENDED:
Log.d(TAG,"ACTION_DRAG_ENDED...");
v.invalidate();
return true;
case DragEvent.ACTION_DRAG_ENTERED:
Log.d(TAG,"ACTION_DRAG_ENTERED...");
v.invalidate();
return true;
case DragEvent.ACTION_DRAG_EXITED:
Log.d(TAG,"ACTION_DRAG_EXITED...");
v.invalidate();
return true;
case DragEvent.ACTION_DRAG_LOCATION:
Log.d(TAG,"ACTION_DRAG_LOCATION...");
v.invalidate();
return true;
}
return true;
}
});

setContentView(container,new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
}

private class MyDrogBuild extends View.DragShadowBuilder{

public MyDrogBuild(View v){
super(v);
}

@Override
public void onDrawShadow(Canvas canvas) {
//当长安拖拽时,改变阴影view 为自定义小图片
Bitmap bitmap = BitmapFactory.decodeResource(
TestDrogActivity.this.getResources(),R.mipmap.ic_launcher);
canvas.drawBitmap(bitmap,0,0,null);
//            super.onDrawShadow(canvas);
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android 拖拽 drag