Android ImageView的拖拽实现
2013-08-06 08:44
351 查看
在Android中我们可以通过对ImageView的ontouch事件进行监听,然后重新layout imageview来拖动它。这种情况下源ImageView也会跟着动。我们如果想实现源ImageView不动而有拖拽效果可以结合OnTouchListener 和 OnDragListener。、 我们对ImageView设置OnTouchListener 事件,对这个ImageView要拖到的目的区域设置OnDragListener事件。下面贴下代码。
/** * Touch 事件 */ final OnTouchListener movingEventListener = new OnTouchListener() { private int downX; private int downY; public boolean onTouch(View view, MotionEvent motionEvent) { int id = view.getId(); if (Constant.isScanning && (id == R.id.image_picture || id == R.id.image_file || id == R.id.image_music || id == R.id.image_video)) { Toast.makeText(Constant.applicationContext, "正在扫描SDCard,请稍后。", Toast.LENGTH_SHORT).show(); return false; } switch (motionEvent.getAction()) { case MotionEvent.ACTION_DOWN: downX = (int) motionEvent.getX(); downY = (int) motionEvent.getY(); break; case MotionEvent.ACTION_MOVE: int moveX = (int) motionEvent.getX(); int moveY = (int) motionEvent.getY(); int deltaY = moveY - downY; if (Math.abs(deltaY) > 20) { ClipData data = ClipData.newPlainText("", ""); DragShadowBuilder shadowBuilder = new View.DragShadowBuilder( view); view.startDrag(data, shadowBuilder, view, 0); return true; } break; } return false; } };
picture.setOnTouchListener(movingEventListener);picture 是要拖拽的ImageView的实例。对其设置onTouchListener监听事件,如果deltaY的绝对值大于20我们会触发它的拖拽动作。
/** * 拖拽事件 * * @Package com.example.privatecloud * @ClassName: DragListener * @date 2013-8-1 上午11:04:48 */ class DragListener implements OnDragListener { Drawable enterShape = getResources().getDrawable( R.drawable.shape_droptarget); Drawable normalShape = getResources().getDrawable(R.drawable.shape); @Override public boolean onDrag(View v, DragEvent event) { int action = event.getAction(); switch (event.getAction()) { case DragEvent.ACTION_DRAG_STARTED: // Do nothing break; case DragEvent.ACTION_DRAG_ENTERED: v.setBackgroundDrawable(enterShape); break; case DragEvent.ACTION_DRAG_EXITED: v.setBackgroundDrawable(normalShape); break; case DragEvent.ACTION_DROP: // Dropped, reassign View to ViewGroup View view = (View) event.getLocalState(); // ViewGroup owner = (ViewGroup) view.getParent(); // owner.removeView(view); // RelativeLayout container = (RelativeLayout) v; // container.addView(view); startTransmiss(view); view.setVisibility(View.VISIBLE); break; case DragEvent.ACTION_DRAG_ENDED: v.setBackgroundDrawable(normalShape); default: break; } return true; } }
serverLayout.setOnDragListener(new DragListener());
serverLayout就是我们的ImageView要拖拽的目的区域,在ACTION_DROP这个事件时,我们可以执行拖拽成功的操作了。
相关文章推荐
- android imageview 多点触碰(MultiTouch)实现图片拖拽移动缩放
- android imageview 多点触碰(MultiTouch)实现图片拖拽移动缩放
- android imageview 多点触碰(MultiTouch)实现图片拖拽移动缩放
- Android 在viewPager中双指缩放图片双击缩放图片单指拖拽图片的实现思路
- Android实现RecyclerView侧滑删除和长按拖拽
- Android实现ImageView图片缩放和拖动
- Android中ImageView实现选择本地图片并显示功能
- Android 自定义ImageView支持缩放,拖拽,方便复用
- 【Android】自定义ImageView实现图片的平移、缩放、旋转(手势操作)
- Android 自定义imageview实现图片缩放实例详解
- Android 利用TimerTask实现ImageView图片播放效果
- Android 实现弧形View或者ImageView
- Android 自定义ImageView支持缩放,拖拽,方便复用
- android实现正方形的ImageView、Layout等(即高度适应宽度或者宽度适应高度)
- Android SmartImageView插件实现图片浏览功能
- android自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
- Android自定义控件:imageview重写onMeasure方法实现图片按指定比例显示,拉伸永不变形,解决屏幕适配问题
- android 自定义ImageView实现图片手势滑动、多点触摸缩放
- 自定义ImageView实现单点缩放回弹、拖拽、多点缩放功能
- Android recyclerview实现拖拽排序和侧滑删除