zoukankan      html  css  js  c++  java
  • 贝济埃曲线quadTo与传统的手势轨迹平滑度对比分析

    package com.loaderman.customviewdemo;
    
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.Path;
    import android.util.AttributeSet;
    import android.view.MotionEvent;
    import android.view.View;
    
    public class NormalGestureTrackView extends View {
        private Path mPath = new Path();
        private Paint mPaint;
    
        public NormalGestureTrackView(Context context, AttributeSet attrs) {
            super(context, attrs);
    
            mPaint = new Paint();
            mPaint.setColor(Color.BLACK);
            mPaint.setStyle(Paint.Style.STROKE);
            mPaint.setStrokeWidth(5);
        }
    
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN: {
                    mPath.moveTo(event.getX(), event.getY());
                    return true;//代表消费了触摸事件
                }
                case MotionEvent.ACTION_MOVE:
                    mPath.lineTo(event.getX(), event.getY());//曲线转折处不够平滑
                    postInvalidate();
                    break;
                default:
                    break;
            }
            return super.onTouchEvent(event);
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            canvas.drawColor(Color.WHITE);
            canvas.drawPath(mPath, mPaint);
        }
    }
    package com.loaderman.customviewdemo;
    
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.Path;
    import android.util.AttributeSet;
    import android.view.MotionEvent;
    import android.view.View;
    
    public class BezierGestureTrackView extends View {
        private Path mPath = new Path();
        private Paint mPaint;
        private float mPreX,mPreY;
    
        public BezierGestureTrackView(Context context, AttributeSet attrs) {
            super(context, attrs);
    
    
            mPaint = new Paint();
            mPaint.setColor(Color.BLACK);
            mPaint.setStyle(Paint.Style.STROKE);
            mPaint.setStrokeWidth(5);
        }
    
        @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:{
                mPath.moveTo(event.getX(),event.getY());
                mPreX = event.getX();
                mPreY = event.getY();
                return true;
            }
            case MotionEvent.ACTION_MOVE:{
                float endX = (mPreX+event.getX())/2;
                float endY = (mPreY+event.getY())/2;
                mPath.quadTo(mPreX,mPreY,endX,endY);//实现手势平滑过渡
                mPreX = event.getX();
                mPreY =event.getY();
                invalidate();
            }
            break;
            default:
                break;
        }
        return super.onTouchEvent(event);
    }
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            canvas.drawColor(Color.WHITE);
            canvas.drawPath(mPath,mPaint);
        }
    }
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        tools:context=".MainActivity">
    
        <com.loaderman.customviewdemo.NormalGestureTrackView
            android:layout_width="match_parent"
    
            android:layout_height="300dp" />
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="5dp"
            android:background="@color/colorPrimary" />
    
        <com.loaderman.customviewdemo.BezierGestureTrackView
            android:layout_width="match_parent"
            android:layout_height="300dp" />
    </LinearLayout>

    效果图

  • 相关阅读:
    springMVC工作原理
    关于VS调试Web 无法启动IIS Express Web 服务器的问题解决
    用泛型创建SqlServerHelper类实现增删改查(一)
    laytpl--前端数据绑定
    安装.NET Core 运行时和托管包后,.Net Core项目选择不到安装的.Net Core Sdk,导致项目加载失败
    .Net上传图片的一些问题
    微信退款参数格式错误
    Ajax设置自定义请求头的两种方法
    asp.net获取当前请求的url
    Windows服务器上使用phpstudy部署PHP程序
  • 原文地址:https://www.cnblogs.com/loaderman/p/10212442.html
Copyright © 2011-2022 走看看