zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    微信小程序获取用户绑定手机号码完整版
    SQL读取当天的数据
    Android 百度离线地图(由apk文件转入手机内部存储)
    解决windows家庭版系统不支持远程桌面功能问题
    微信小程序携参跳转页面
    微信小程序 websocket 封装
    微信小程序HTTP请求封装
    Ionic项目打包Android在9版本以上不能进行HTTP通信问题
    Ionic 使用 MQTT
    Ionic HTTP 请求
  • 原文地址:https://www.cnblogs.com/94xiyang/p/9488382.html
Copyright © 2011-2022 走看看