• Android SurfaceView实现跟随手指移动的光标


    实例

    public class DragSurfaceView extends SurfaceView implements SurfaceHolder.Callback,Runnable{
        private int screenW;        //屏幕宽度
        private int screenH;        //屏幕高度
        private float cx = 100;      //默认X坐标
        private float cy = 100;      //默认Y坐标
        private Bitmap mBitmap;
        private SurfaceHolder mSurfaceHolder = null;
        private Thread thread = null;
        public DragSurfaceView(Context context,@Nullable AttributeSet attrs) {
            super(context,attrs);
            mSurfaceHolder = getHolder();
            mSurfaceHolder.addCallback(this);
            mBitmap=getBitmapResources(context,R.drawable.x1);
            thread=new Thread(this);
    
        }
        public static Bitmap getBitmapResources(Context context,int resId){
             return BitmapFactory.decodeResource(context.getResources(),resId);
       }
    
        protected void myDraw() {
            //获取canvas实例
            Canvas canvas = mSurfaceHolder.lockCanvas();
            //将屏幕设置为白色
            canvas.drawColor(Color.WHITE);
            //绘制图片和位置
            canvas.drawBitmap(mBitmap,cx,cy,null);
            //将画好的画布提交
            mSurfaceHolder.unlockCanvasAndPost(canvas);
        }
    
        @Override
        public void run() {
            while(true){
                try{
                    myDraw();
                    Thread.sleep(100);
                }catch(InterruptedException e){
                    e.printStackTrace();
                }
            }
        }
    
        @SuppressLint("ClickableViewAccessibility")
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    // 按下
                    cx = (int) event.getX();
                    cy = (int) event.getY();
                    break;
                case MotionEvent.ACTION_MOVE:
                    // 移动
                    cx = (int) event.getX();
                    cy = (int) event.getY();
                    break;
                case MotionEvent.ACTION_UP:
                    // 抬起
                    cx = (int) event.getX();
                    cy = (int) event.getY();
                    break;
            }
            return true;
        }
    
        //surface创建的时候调用
        @Override
        public void surfaceCreated(SurfaceHolder surfaceHolder) {
            //获取屏幕高度
            screenW = getWidth();
            screenH = getHeight();
            thread.start();
        }
    
        //surface被改变的时候调用
        @Override
        public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
    
        }
    
        //surface销毁的时候调用
        @Override
        public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
            doRecycledIfNot(mBitmap);
        }
    
        //回收一个未被回收的Bitmap
        public static void doRecycledIfNot(Bitmap bitmap) {
            if (!bitmap.isRecycled()) {
                bitmap.recycle();
            }
        }
    }

     相关阅读

    了解SurfaceView

  • 相关阅读:
    Spring MVC+Spring +Hibernate配置事务,但是事务不起作用
    Spring MVC 上传文件
    早安日语1
    Spring MVC学习初篇
    Eclipse中查看JDK源码设置
    Eclipse常见设置及快捷键使用总结(更新中)
    Java中boolean型变量的默认值问题
    [转载]浅析Java中的final关键字
    Eclipse中Outline里各种图标的含义
    [转载]深入理解JAVA的接口和抽象类
  • 原文地址:https://www.cnblogs.com/94xiyang/p/9488382.html
Copyright © 2020-2023  润新知