保存触摸点,点击按钮进行回放

最近做了一个功能和两年前一样的功能,我想说的是我还真不会写了。又在网上进行了搜索找到了。今天记录下来,下次在遇到就不用四处搜索了。

这里我提供两个方法去做这个功能。

1,自定义view

  准备画布和画笔  上代码

        paint = new Paint();
        paint.setColor(Color.BLUE);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(10);
        //bitmap
        bitmap = Bitmap.createBitmap(width3, height3, Bitmap.Config.ARGB_8888);

        //创建画布
        canvas = new Canvas(bitmap);

        //imageView 设置bitmap
        gestureOverlayView.setImageBitmap(bitmap);

imaggview设置触摸事件

 gestureOverlayView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                point = new Point((int) event.getX(), (int) event.getY());
                // 绘制触摸轨迹,同时存储轨迹
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        downX = event.getX();
                        downY = event.getY();
                        list.add(point);
                        break;
                    case MotionEvent.ACTION_MOVE:
                        upX = event.getX();
                        upY = event.getY();
                        canvas.drawLine(downX, downY, upX, upY, paint);
                        gestureOverlayView.invalidate();
                        downX = upX;
                        downY = upY;
                        list.add(point);
                        break;
                    case MotionEvent.ACTION_UP:
                        list.add(point);
                        // 线段绘制结束时,创建一个临时的list,转存这条线段(不要直接=)
                        List<Point> list_temp = new ArrayList<Point>(list);
                        linesList.add(list_temp);
                        // 存储完一条线段后,清空list对象


                         pointString = gson.toJson(linesList);
                        list.clear();
                        break;
                    case MotionEvent.ACTION_CANCEL:
                        break;

                }

                return true;
            }
        });

这里有一个很大坑,就是需要将绘制的线段保存到一个临时的list中,在将list保存到大的集合中。如果不这样会出现保存的绘制线段只是最后的一段。

 

还需要注意的就是利用Gosn对线的集合转为String,(方便保存信息) 再次用的时候就只需吧String 转回线的集合就可以了

 

回放


        List<List<Point>> newPoint = new ArrayList<>();


        newPoint  = gson.fromJson(one,new TypeToken<List<List<Point>>>(){}.getType());




        if (newPoint.size() > 0) {
            for (int i = 0; i < newPoint.size(); i++) {
                if (newPoint.get(i).size() > 0) {
                    if (newPoint.get(i).size() > 1) {
                        for (int j = 0; j < newPoint.get(i).size(); j++) {
                            if (j == newPoint.get(i).size() - 1) {
                                continue;
                            }
                            canvas.drawLine(newPoint.get(i).get(j).x, newPoint.get(i).get(j).y, newPoint.get(i).get(j + 1).x, newPoint.get(i).get(j + 1).y, paint);
                            gestureOverlayView.invalidate();
                        }
                    }
                }
            }

        }

2 ,第二种就是通过

GestureOverlayView

手势的方式进行point的保存

	mDrawGestureView.addOnGestureListener(new OnGestureListener() {

			@Override
			public void onGestureStarted(GestureOverlayView overlay,
					MotionEvent event) {
				mGesture = null;

				if (list.size() > 0)
					list.clear();
				float x = event.getX();

				float y = event.getY();



				point = new Point((int)x,(int)y);

				list.add(point);


			}

			@Override
			public void onGesture(GestureOverlayView overlay, MotionEvent event) {
				float x = event.getX();

				float y = event.getY();



				point = new Point((int)x,(int)y);

				list.add(point);

			}

			@Override
			public void onGestureEnded(GestureOverlayView overlay,
					MotionEvent event) {
				mGesture = overlay.getGesture();
				if (mGesture != null) {
					// mButton1.setEnabled(true);
				}
				float x = event.getX();

				float y = event.getY();



				point = new Point((int)x,(int)y);

				list.add(point);

				List<Point> kk = new ArrayList<>(list);

				listPoint.add(kk);

				one = gson.toJson(listPoint);

				Log.d("dada", "onGestureEnded: "+listPoint.size());


			}

			@Override
			public void onGestureCancelled(GestureOverlayView overlay,
					MotionEvent event) {

			}

		});
GestureOverlayView有三个callback 对点进行保存即可。回放的方式和第一种一样。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值