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使用遥控器模拟鼠标拖拽操作
- 学习笔记:Android SQLite,并实现SQLite基本CRUD操作的Demo
- Android串口操作,简化android-serialport-api的demo(转载)
- Android串口操作,简化android-serialport-api的demo(转)
- Android带通知栏操作多页面同步暂停支持多任务多线程断点下载demo
- Android WebView与JavaScript交互操作(Demo)
- android文件操作——读写文件demo
- android 使用 websocket 进行长链接的一个简单的 demo,可以用来收发消息或别的操作,里面用到了 autobahn 的 jar 包
- Android串口操作,简化android-serialport-api的demo(附源码)
- Android串口操作,简化android-serialport-api的demo(附源码)
- android数据库操作的demo
- Android串口操作,简化android-serialport-api的demo的问题
- Android demo-->界面无操作超时处理
- Android串口操作,简化android-serialport-api的demo
- Android~AsyncTask异步操作DEMO学习解析
- Android串口操作,简化android-serialport-api的demo
- Android-ble - Android蓝牙4.0操作demo
- Android串口操作,简化android-serialport-api的demo
- Android-Sqlite数据库_打开已有数据库操作Demo
- Android串口操作,简化android-serialport-api的demo