首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在android中绘制单点触控运动路径

在Android中,绘制单点触控运动路径可以通过以下步骤实现:

  1. 创建一个自定义视图,继承自ViewGroup,并重写onLayout、onInterceptTouchEvent等方法。
  2. 在自定义视图中,创建一个Path对象,用于存储触摸点的运动路径。
  3. 在自定义视图中,创建一个Paint对象,用于设置绘制路径的颜色、宽度等属性。
  4. 在自定义视图中,重写onDraw方法,在其中绘制路径。
  5. 在自定义视图中,重写onTouchEvent方法,用于处理触摸事件。
  6. 在onTouchEvent方法中,根据触摸事件的不同状态,更新Path对象的路径。
  7. 在自定义视图中,创建一个Canvas对象,用于绘制路径。
  8. 在自定义视图中,重写dispatchDraw方法,在其中绘制路径。
  9. 在Activity中,添加自定义视图,并设置其宽高为MATCH_PARENT,以便覆盖整个屏幕。

以下是一个简单的示例代码:

代码语言:java
复制
public class SinglePointPathView extends ViewGroup {
    private Path mPath;
    private Paint mPaint;
    private Canvas mCanvas;
    private Bitmap mBitmap;

    public SinglePointPathView(Context context) {
        super(context);
        init();
    }

    public SinglePointPathView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public SinglePointPathView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        mPath = new Path();
        mPaint = new Paint();
        mPaint.setColor(Color.BLACK);
        mPaint.setAntiAlias(true);
        mPaint.setStrokeWidth(10);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        mCanvas = new Canvas(mBitmap);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawPath(mPath, mPaint);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return true;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getAction();
        float x = event.getX();
        float y = event.getY();

        switch (action) {
            case MotionEvent.ACTION_DOWN:
                mPath.moveTo(x, y);
                break;
            case MotionEvent.ACTION_MOVE:
                mPath.lineTo(x, y);
                break;
            case MotionEvent.ACTION_UP:
                break;
        }

        mCanvas.drawPath(mPath, mPaint);
        invalidate();
        return true;
    }
}

在Activity中使用:

代码语言:java
复制
public class MainActivity extends AppCompatActivity {
    private SinglePointPathView mPathView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mPathView = new SinglePointPathView(this);
        mPathView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        ((ViewGroup) findViewById(android.R.id.content)).addView(mPathView);
    }
}

这样就可以在Android中绘制单点触控运动路径了。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

绘制路径Android 矢量图渲染

了解 Android 的矢量图片格式:VectorDrawable 我们讨论了如何定义组成 assets 形状的路径。...在这篇文章,我将深入探讨这些技巧:颜色资源、主题颜色、颜色状态列表和渐变的使用。 简单的颜色 绘制路径最简单的方法是指定一种硬编码的 fill/stroke 颜色。 <!...具有重叠路径和半透明主题颜色的资源:比较着色和填充模式 请注意,你可以通过设置 android:theme 属性,Activity/View 级别改变可绘制对象的主题,或者代码中使用 ContextThemeWrapper...以下示例,定义了一个径向渐变:中心蓝色 → 紫色圆形,但充满更大的正方形路径。 ? 渐变平铺模式 模式 我们可以结合使用起止颜色和平铺模式来实现矢量图形的基本模式支持。...使用渐变近似阴影 同样,这离完全的支持阴影还有很长的路要走,因为只能绘制线性/径向/扫描渐变,而不能沿着任意路径绘制

3K20

android的详解

如果你是一个Android用户,而且你有一个老旧的安装有android 1.5 的android设备,你可能会注意到一些高版本的应用没有在手机上的Android Market 显示。...android.hardware.touchscreen.multitouch:它要求设备有一个多点的屏幕以支持基本的多点交互,就如收缩(放大)图像比例。...android.hardware.touchscreen.multitouch.distinct: 这是一个多点的兄弟属性,它要求提设备供完整的多点功能。...现在只要记住在当你的游戏需要一个支持多点的屏幕的时候,我们可以使用 元素来剔除所有不支持多点的设备,就像下面这样: <uses-feature android:name...举个例子,如果你的游戏需要有多点的支持,但是我们也可以思考另外一种方法,是游戏能够支持单点的设备上运行良好,我们就可以写2个路径的代码,分别在两种设备上运行。

1.4K100
  • Android 中心区域选中图表 WheelChart

    /u012422440/article/details/51213348 根据实现的步骤拆分为如下功能点 自定义属性的设置及使用 draw 绘制图表 触摸控制并处理多指问题(手指拖动图表可移动) 惯性滚动...文件声明该控件的一些自定义属性,构造方法解析,设置控件的属性即可 2. draw 绘制图表 绘制图表其实主要时数学问题,具体坐标的计算就不再赘述了 请教扔物线的时候,我问他会不会有性能问题...但由于如果只绘制屏幕显示区域的话,左右两侧的点需要计算path连接而且滚动时文字的显示会有突然显示或隐藏的问题,所以把绘制区域加长,左右两侧均多绘制一个label的距离 绘制区域为绿色加红色 ?...事件需要根据第一个点id计算移动距离,直接调用event.getX()方法,会有多点问题(复现步骤:一个手指滑动后,按下第二个手指,第一个手指抬起,view会自动滚动) 因为后面会有点击事件的判断...点击选中 点击事件的判定:最开始的想法是,判断事件如果是down紧接up即为点击,后来发现这种判定比较苛刻,因为有些点击事件会引起略微的move事件,所以move事件判断如果move距离较短

    82910

    Android开发时的多点是如何实现的?

    对于Android自定义控件开发,多点是一个必须要懂的知识点。因为正常的情况下操作正常的控件,使用多指操作时,基本上都会出现问题。当需要对多指操作进行兼容时,就需要这方面的知识了。...▼ 单点与多点 1 单点 单点与多点是相对的,单点的意思是,我们只考虑一根手指的情况,而且仅处理一根手指的触摸事件,而多点是处理多根手指的触摸事件。...一般我们处理MotionEvent事件,通过MotionEvent.getAction来获取事件类型,这就是单点单点,会涉及对下面几个消息的处理。...说明:单点是通过getAction来获取当前事件类型的,而多点是通过getActionMasked来获取的。 多点涉及的消息类型与单点的不一样,它的消息类型如下。...多点,就是用PointerIndex和PointerId来标识用户手指的。 PointerIndex表示当前手指的索引,PointerId是手指按下时分配的唯一id,用来标识这根手指。

    1K20

    Android Scroll分析

    在此之前,我们需要先了解下Android的窗口坐标体系和屏幕的事件MotionEvent。 ---- Android坐标系 所谓滑动,正是相对于参考系的运动。...另外在事件中使用 getRawX(),getRawY()方法所获得的坐标同样是Android坐标系的坐标。...触摸事件,通过getX()和getY()所获得的坐标就是视图坐标系的坐标。 ---- 事件-MotionEvent 事件MotionEvent在用户交互,占据着举足轻重的位置。...,通常可以使用以上代码来完成事件的监听,上述仅仅是一个代码模板~ Android中提供了很多获取坐标值,相对举例的方法,我们来梳理一下。...方法 概述 View绘制时,会调用onLayout()方法来设置显示的位置。

    80820

    android绘制触点轨迹的代码

    本文实例为大家分享了android绘制触点轨迹的具体代码,供大家参考,具体内容如下 重点函数是onTouchEvent(),所有的触摸事件都会在View的这个函数里面处理 单点 单点的event...多点 多点的event是通过event.getActionMasked()获得的,一般最少需要考虑下面这个五种情况,因为有多个点需要处理,所以需要判断event是哪一个触摸点的事件,Android...注意这里的触摸点的index,指的是Action的,而不是event的,这是两个概念。...event.findPointerIndex(id); int x=getX(pointerIndex); int y=getY(pointerIndex); MotionEvent.ACTION_POINTER_DOWN: 多点时按下手指时触发...MotionEvent.ACTION_POINTER_DOWN: 多点抬起手指时触发,如果当前只有一个点,则不会触发此事件。

    1.2K20

    Android自定义系列——14.MotionEvent

    MotionEventandroid的触摸事件起到了很重要的作用,本文主要介绍MotionEvent,简要介绍触摸事件,主要包括 单点、多点、鼠标事件 以及 getAction() 和 getActionMasked...Android 将所有的输入事件都放在了 MotionEvent : 版本号 更新内容 Android 1.0 (API 1 ) 支持单点和轨迹球的事件。...Android 1.6 (API 4 ) 支持手势。 Android 2.0 (API 5 ) 支持多点。...Android 3.1 (API 12) 支持触控笔,鼠标,键盘,操纵杆,游戏控制器等输入工具。 单点 事件 简介 ACTION_DOWN 手指 初次接触到屏幕 时触发。...Android 2.0 版本的时候开始支持多点,一旦出现了多点,很多东西就突然之间变得麻烦起来了,首先要解决的问题就是 多个手指同时按在屏幕上,会产生很多的事件,这些事件该如何区分呢?

    1.8K10

    Android面试官最爱问的12个自定义View的高级问题

    自定义View的基础知识 问题:请解释自定义View的基本概念及其Android开发的重要性。 出发点:了解面试者对自定义View核心概念的理解,以及其实际开发的应用能力。...自定义View的多点与滑动 问题:如何使用GestureDetector实现手势识别? 出发点:测试面试者对于手势处理工具的熟练掌握程度。...问题:自定义View,如何处理多点事件? 出发点:考察面试者对于多点事件处理的实际操作能力。...参考简答: 使用MotionEvent的多点方法:通过getPointerCount获取触摸点数量,通过getX(i)和getY(i)获取各个触摸点的坐标。...手势解析库的使用:复杂场景下,考虑使用手势解析库如GestureDetector,简化多点的处理逻辑。 问题:自定义View,如何实现滑动和缩放功能?

    1K20

    自定义 View 系列(一)-坐标系和视图坐标系

    接下来就学习一下 Android 的相关坐标系。 Android 坐标系 物理,要描述一个物体的运动,就必须选定一个参考系。所谓滑动,正式相对于参考系的运动。...Android,将屏幕最左上角的顶点作为Android坐标系的原点,从原点向右是X轴正方向,从原点向下是Y轴正方向: ?...另外,事件中使用 getRawX() 和 getRawY() 方法所获取的坐标同样是 Android 坐标系的坐标。...只不过视图坐标系,原点不再是 Android 坐标系的屏幕左上角,而是以父视图左上角为坐标原点。 ?...image 事件,通过 getX() 和 getY() 所获得的坐标就是视图坐标的坐标。 Android ,系统提供了非常多的方法来获取坐标值、相对距离等。

    92740

    Android多点技术实战,自由地对图片进行缩放和移动

    因此本篇文章,我们就来对这一功能进行完善,加入点击图片就能浏览大图的功能,并且浏览大图的时候还可以通过多点的方式对图片进行缩放。...那我们现在就开始动手吧,首先打开上次的PhotoWallFallsDemo项目,在里面加入一个ZoomImageView类,这个类就是用于进行大图展示和多点缩放的,代码如下所示: public class...这里所有的偏移和缩放操作都是通过矩阵来完成的,我们把要缩放和偏移的值都存放在矩阵,然后绘制图片的时候传入这个矩阵对象就可以了。 图片初始化完成之后,就可以对图片进行缩放处理了。...,接着使用BitmapFactory将路径下的图片加载到内存,然后调用ZoomImageView的setImageBitmap()方法将图片传入,就可以让这张图片展示出来了。... 这样所有的编码工作就已经完成了,现在我们运行一下程序,又会看到熟悉的照片墙界面,点击任意一张图片会进入到相应的大图界面,并且可以通过多点的方式对图片进行缩放

    2.2K50

    Unity 移动端触摸屏操作

    Unity 屏操作 当将Unity游戏运行到IOS或Android设备上时,桌面系统的鼠标左键可以自动变为手机屏幕上的屏操作,但如多点屏等操作却是无法利用鼠标操作进行的。...Unity的Input类不仅包含桌面系统的各种输入功能,也包含了针对移动设备屏操作的各种功能,下面介绍一下Input类碰操作上的使用。...每个手指都是通过Input.touches来描述的: fingerId 触摸的唯一索引 position 触摸屏幕的位置 deltatime 从最后状态到目前状态所经过的时间...Moved 手指在屏幕上移动 Stationary 手指触摸屏幕,但自最后一阵没有移动 Ended 手指离开屏幕 Canceled 系统取消跟踪...{ if (Input.touchCount <= 0) return; if (Input.touchCount == 1) //单点碰移动摄像机

    3K20

    React Native组件(二)View组件解析

    这个回调也会发生在系统直接终止组件的事件处理,例如用户触摸操作过程,突然来电话的情况。...它用来控制当前视图是否可以作为事件的目标。 开发,很多组件是被布局到手机界面上的,其中一些组件会遮盖住它的位置下方的组件,有一些场景需要被遮盖住的组件来处理事件。...pointerEvents的取值含义如下所示: none:组件自身不能作为事件的目标,交由父组件处理。 box-none:组件自身不能作为事件的目标,但其子组件可以。...box-only:组件自身可以作为事件的目标,但其子组件不能。 auto:组件可以作为事件的目标。...Android平台上,这对于只修改透明度、旋转、位移和缩放的动画和交互是很有用的:视图不必每次都重新绘制,显示列表也不需要重新执行,纹理可以被重用于不同的参数。

    2.5K60

    札记:android手势识别,MotionEvent

    安卓屏系统,支持单点、多点(点通常就是手指)触摸,每个点有按下,移动和抬起。 屏交互的处理分不同屏操作——手势的识别,然后是根据业务对应不同处理。为了响应不同的手势,首先就需要识别它们。...onDown方法需要返回true,否则后续事件会被忽略。 手势运动 手势可以分为运动型和非运动型。比如tap(轻敲)就没有移动,而scroll要求手指有一定的移动距离。...VelocityTracker 有时对手势运动过程的速度感兴趣,可以通过android.view.VelocityTracker来根据收集的事件数据计算得到运动时的速度: public class MainActivity...通常,需要对手势运动进行响应,比如画面跟随手指的移动而移动(平移),简单的实现就是ACTION_MOVE即时偏移对应的x,y,这种情况下对动作的“响应时机”是显而易见的。...ACTION_MOVE记录移动到的位置,以及更新最后的触摸位置。最后,UP、CANCEL清除记录的pointerId。

    5.1K70

    android画图之贝塞尔曲线讲解

    一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋; 上面这一段话其实就“线段像可伸缩的皮筋”这一句比较重要,也很容易理解;         至于贝赛尔曲线的实现,Android...只不过它隐藏的比较深,它隐藏于Path类,方法如下: android.graphics.Path.quadTo(float x1, float y1, float x2, float y2) Since...框架不多讲,看过我博客的都应该知道的; 直接看MySurfaceView类,此类继承SurfaceView ,是游戏的主视图 这里为了更清晰的讲解:这里部分代码先不贴出来了,最后会整体贴出,当然源码也是免费最后提供...(Path)     canvas.drawPath(path, paintQ);   }   最后是用户屏监听函数以及逻辑函数: /**  * 屏事件监听  */ @Override  ...x,y的一半,呵呵偷懒了~嘻嘻~ 我把贝赛尔的操作点写在了逻辑logic()函数,不断的执行,并且每次利用nextInt函数得到随机的操作点,主要为了让其曲线不断的变化从而形成一个震动的曲线运动轨迹;

    1.2K70
    领券