点击视图中的图片拖动位置
2013-07-18 14:43
183 查看
代码如下,不做分析,请看注释:
一般配置如下的主题
一般配置如下的主题
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
public class MySurfaceView extends SurfaceView { private SurfaceHolder holder ; private Bitmap icBitmap ; private DrawThread thread ; boolean isMove = false ; private float cx , cy ;//当前图片的位置坐标 private float ex , ey ;//事件发生的位置坐标 int vw,vh,bw,bh ;//窗口的长宽和图片的长宽 public MySurfaceView(Context context) { this(context,null) ; } public MySurfaceView(Context context, AttributeSet attrs) { super(context, attrs); init(); holder = getHolder() ; holder.addCallback(callback); } private void init() { icBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher) ; } private Callback callback = new Callback() { //当SurfaceView被从窗口剥离后会调用此方法 //回收资源,和停止线程 @Override public void surfaceDestroyed(SurfaceHolder holder) { thread.interrupt(); icBitmap.recycle(); } //当SurfaceView被创建后会调用此方法 //绘制线程的启动 @Override public void surfaceCreated(SurfaceHolder holder) { //得到屏幕的长宽 vw = holder.getSurfaceFrame().width() ; vh = holder.getSurfaceFrame().height() ; //得到图片的长宽 bw = icBitmap.getWidth() ; bh = icBitmap.getHeight() ; if(thread == null){ thread = new DrawThread() ; }thread.start(); } //SurfaceView 的大小发生改变的时候调用此方法 @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } }; final class DrawThread extends Thread{ @Override public void run() { Matrix m = new Matrix() ; while(!isInterrupted()){ //不能超出屏幕范围,超过了固定在边沿 if(cx > vw - bw)cx = vw -bw ; if(cy > vh - bh)cy = vh -bh ; m.setTranslate(cx, cy); Canvas c = holder.lockCanvas() ; if (c == null)break ; c.drawColor(Color.BLACK); c.drawBitmap(icBitmap, m, null); //c.drawBitmap(icBitmap, cx, cy, null); //对画布进行解锁和调用postInvalidate() holder.unlockCanvasAndPost(c); } } } //触摸屏幕调用的方法 @Override public boolean onTouchEvent(MotionEvent event) { ex = event.getX() ; ey = event.getY() ; int action = event.getAction() ; switch(action){ case MotionEvent.ACTION_DOWN: //判断事件的点击是否发生在图片上 if(cx<ex && ex<cx + bw && cy<ey && ey <cy + bh) isMove = true ; break ; case MotionEvent.ACTION_UP: isMove = false ; break ; case MotionEvent.ACTION_MOVE : if(isMove == true){ cx = ex ; cy = ey ; } break ; } return true ; } }
相关文章推荐
- android UI 仿 win 8 模块化 标题,并实现 可长按拖动交换图片位置、可点击,且伴随动画特效
- 如何在自定义view确定你点击的位置位于哪个小的子视图
- 论坛源码推荐(8月27日):创建可拖动视图,社交类应用图片预览的实现
- Android:图片中叠加文字,支持拖动改变位置
- Android下图片可拖动到任意位置的效果的实现源码
- winform 鼠标拖动移动图片位置
- 点击 鼠标 图片跟着鼠标的位置
- 图片热区,使图片的某个位置可以点击链接到其他页面
- WinForm点击窗体任意位置拖动窗体
- opencv学习笔记11 在图片中添加文字,点击鼠标显示位置坐标
- 154在屏幕中绘图时设置透明度(扩展知识:为图片视图添加点击手势识别器,来实现点击事件操作)
- android浮层 图片拖动并且可点击
- unity3d ugui 图片点击与拖动同存互不影响
- Android的一段常用动画效果代码(如何让点击的图片控件加速飞入到指定位置)
- Qt drag(拖动图片)时如何设置图片某个位置与鼠标绑定在一起移动
- 实现类似于QQ空间相册的点击图片放大,再点后缩小回原来位置
- 微信公众号点击分享生成分享的图片,可以调整二维码,头像,昵称到背景图指定位置
- android浮层图片拖动并且可点击效果
- 图片点击放大,再次点击返回原视图.完美封装,一个类一句代码即可调用.IOS完美实现
- 图片的映射(点击图片某位置进行跳转)