一般思路是先做人物两点件移动,手滑动时记录划过的坐标点组成一个点的集合(可以设采样间隔不用记录每个点,间隔越小人物移动的越平滑),再循环取集合内相邻的两点做人物移动。

首先你得重写onTouchEvent是必须的,然后使用一个定义private ArrayList<PointF> pinfs = new ArrayList<PointF>();来存所以的点在onTouchEvent中。

switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:pinfs.add(new PointF(event.getX(),event.getY()));break;
case MotionEvent.ACTION_MOVE:pinfs.add(new PointF(event.getX(),event.getY()));break;
case MotionEvent.ACTION_UP:invalidate();break;
}然后在 @Override
protected void onDraw(Canvas canvas) {for (PointF point : pinfs) {这里绘制人物移动}}

--------------------------------------------------------  以下是完整代码 ------------------------

    class CustomView1 extends View{private Paint paint;private ArrayList<PointF> graphics = new ArrayList<PointF>();private Paint  lPaint;private Path   mPath;private  int of = 0;private Boolean over =false;private float mX, mY;private static final float TOUCH_TOLERANCE = 4;public CustomView1(Context context) {super(context);paint = new Paint(Paint.ANTI_ALIAS_FLAG);paint.setColor(Color.RED);paint.setStrokeJoin(Paint.Join.ROUND);paint.setStrokeCap(Paint.Cap.ROUND);paint.setStrokeWidth(65);lPaint = new Paint(Paint.ANTI_ALIAS_FLAG);lPaint.setColor(Color.BLACK);lPaint.setStyle(Paint.Style.STROKE);//空心
            lPaint.setStrokeJoin(Paint.Join.ROUND);lPaint.setStrokeCap(Paint.Cap.ROUND);lPaint.setStrokeWidth(5);mPath = new Path();}@Overridepublic boolean onTouchEvent(MotionEvent event) {float x = event.getX();float y = event.getY();switch (event.getAction()) {case MotionEvent.ACTION_DOWN:over = false;graphics.clear();of=0;graphics.add(new PointF(x, y));touch_start(x, y);invalidate();break;case MotionEvent.ACTION_MOVE:graphics.add(new PointF(x, y));touch_move(x, y);invalidate();break;case MotionEvent.ACTION_UP:over = true;touch_up();invalidate();break;}return true;}private void touch_start(float x, float y) {mPath.reset();mPath.moveTo(x, y);mX = x;mY = y;}private void touch_move(float x, float y) {float dx = Math.abs(x - mX);float dy = Math.abs(y - mY);if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);mX = x;mY = y;}}private void touch_up() {mPath.lineTo(mX, mY);}@Overrideprotected void onDraw(Canvas canvas) {//    canvas.drawColor(Color.TRANSPARENT,Mode.CLEAR);canvas.drawColor(Color.WHITE);//清理
            canvas.drawPath(mPath, lPaint);if(over&&graphics.size()>0){canvas.drawPoint(graphics.get(of).x, graphics.get(of).y, paint);of+=1;if(of<graphics.size()){if(of==graphics.size()-1){mPath.reset();//移动完成后移除线条
                    }invalidate();}}}}

本文转自java豆子博客园博客,原文链接:http://www.cnblogs.com/error404/archive/2012/04/11/2441865.html,如需转载请自行联系原作者

android滑动一个路线后 人物图片按此路线移动的实现相关推荐

  1. 用python画一个简单卡通人物图片_用python画一只可爱的皮卡丘实例

    效果图 #!/usr/bin/env python # -*- coding:utf-8 -*- from turtle import * ''' 绘制皮卡丘头部 ''' def face(x,y): ...

  2. 用python画一个简单卡通人物图片_Python绘制可爱的卡通人物 | 【turtle使用】

    Turtle库 简介 什么是Turtle 首先,turtle库是一个点线面的简单图像库,能够完成一些比较简单的几何图像可视化.它就像一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始 ...

  3. Android 展示一个图片,可以双击放大/缩小(放大后可以移动)

    布局***.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...

  4. 九宫格拼图android代码,Android 多图上传后将图片进行九宫格展示的实例代码

    不多说上代码 public abstract class NineGridAdapter { protected Context context; protected List list; publi ...

  5. 【经验】为什么Android手机连接USB后查看手机内部图片有些有缩略图,有些显示图标?

    [经验]为什么Android手机连接USB后查看手机内部图片有些有缩略图,有些显示图标? 一.图片内嵌缩略图原理 这是什么原理呢?因为现在JPEG的文件采用了压缩的方式,其过程比较复杂.为了能让大家快 ...

  6. Android设计一个图片加载框架

    本文不是具体编码去实现一个图片加载的框架,而是从理论上来讲解设计一个图片加载框架的注意事项和涉及的知识点,提供一个思路,或者帮助童鞋们应付面试.目前Android 发展至今优秀的图片加载框架太多,例如 ...

  7. android 自动相机 图片旋转问题,Android部分手机拍照后获取的图片被旋转问题的解决方法...

    调用Android系统拍照功能后,三星手机拍摄后的照片被旋转了90度,横着拍给你变成竖的,竖的拍给你变成横的.其它品牌的手机都是正常的,就三星出现这个怪事. 在Android适配上,我原来一直以为国内 ...

  8. android android 修改 jpg exif 属性,Android开发之使用ExifInterface获取拍照后的图片属性...

    本文实例讲述了Android开发之使用ExifInterface获取拍照后的图片属性.分享给大家供大家参考,具体如下: ExifInterface exif = new ExifInterface(f ...

  9. H5页面--Android滑动屏幕图片误触

    处理移动端上点击有300ms延迟的方法,我们通常会用fastclick.js来解决,但是调用fastclick.js可能会导致另一个问题,就是在安卓端的时候,H5页面未加载完时,滑动页面如果误触图片, ...

最新文章

  1. 4.10日一直报错application未注入的问题解决
  2. matlab从flove,Matlab玩出新高度,变身表白女友神器_善良995的博客-CSDN博客
  3. angular2新手学习笔记(1)概述
  4. go channel管道select case随机选择管道数据
  5. 迁移学习之域自适应理论简介(Domain Adaptation Theory)
  6. 协议层次及其服务模型
  7. android单独刷入镜像
  8. Spring深入理解之ComponentScan___@ComponentScan 详解
  9. NHibernate:no persister for 异常
  10. 173. 二叉搜索树迭代器/94. 二叉树的中序遍历/145. 二叉树的后序遍历/98. 验证二叉搜索树
  11. 【android】string.xml中的一些错误
  12. 【python基础知识】python输出时出错,UnicodeEncodeError: 'gbk' codec can't encode character '\ue4bf.....
  13. linux 源码安装node 9,linux如何安装node?
  14. [2014.3.23]cse::lab2::partD 简明攻略
  15. 接口和抽象类的区别(转载)
  16. python编辑数学函数图形_Python 绘制你想要的数学函数图形
  17. IM即时通讯项目框架分析
  18. Oracle数据库使用教程
  19. PySpark 之 连接变换 union、intersection、subtract、cartesian
  20. Android调试工具ADB

热门文章

  1. html5自定义报表工具,利用javascript和jxl实现自定义报表的输出
  2. 国外工业控制系统标准概述
  3. 公众号, 订阅号, 服务号, 企业号, 应用号(小程序)都是些什么玩意儿, 有什么关系和区别
  4. 六元均匀直线阵的各元间距为_天线原理考试卷B.doc
  5. 复旦学长:考完初试的这段空档期应该怎么过
  6. python解压版怎么安装_python 解压版 zip file 安装
  7. 中南大学2008级计算机科学张磊,2008级本科生学分制收费标准
  8. Wikileaks公布CIA的代码混淆工具Marble
  9. 入侵思路WIFI和路由器密码破解
  10. Cisco 思科计算机网络 见习总结(一)(路由器密码破解,telnet远程登陆