二话不说,先上代码,超级简单。重绘view

public class DrawCircle extends View{private float currentX = 40;private float currentY = 50;//定义并创建画笔Paint p = new Paint();public DrawCircle(Context context) {super(context);// TODO Auto-generated constructor stub}public DrawCircle(Context context,AttributeSet set){super(context);}@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubsuper.onDraw(canvas);//设置画笔的颜色p.setColor(Color.RED);//绘制一个小圆(作为小球) 四个参数代表坐标   半径  画笔canvas.drawCircle(currentX, currentY, 15, p);}@Overridepublic boolean onTouchEvent(MotionEvent event) {// TODO Auto-generated method stub//修改currentX currentY两个属性currentX = event.getX();currentY = event.getY();//通知当前组件重绘自己invalidate();//返回true表明该处理方法已经处理该事件return super.onTouchEvent(event);}}

然后在你的布局文件里面调用这个类就ok了,记得要调用整个的类名哦

其实实现圆点随着手指移动也挺简单,试了一下,感觉效果还不错。

代码如下:

public class Test extends View {private Scroller scro;private int preX = 0;private int preY = 0;public Test(Context context, AttributeSet attrs) {super(context, attrs);scro = new Scroller(context);}// 触摸事件@Overridepublic boolean onTouchEvent(MotionEvent event) {float x = event.getX();float y = event.getY();invalidate();switch (event.getAction()) {case MotionEvent.ACTION_DOWN:break;case MotionEvent.ACTION_MOVE:preX = (int) x;preY = (int) y;scro.startScroll(preX, preY, 0, 0);// preX-(int)x, preY-(int)y);break;case MotionEvent.ACTION_UP:break;default:break;}return true;}@Overrideprotected void onDraw(Canvas canvas) {Paint paint;paint = new Paint();paint.setColor(Color.RED);canvas.drawCircle(preX + 20, preY + 20, 10, paint);}@Overridepublic void computeScroll() {if (scro.computeScrollOffset()) {} else {}super.computeScroll();}
}

大家对比一下就会发现,这里监听了手指的移动,另外还用了滚动操作Scroller。关于这个参见以下代码。

这里声明文章出处

博客园:http://www.cnblogs.com/

           Android中文翻译组:http://code.taobao.org/project/view/404/

正文

  一、结构

    public class Scroller extends Object

    java.lang.Object

      android.widget.Scroller

  二、概述

这个类封装了滚动操作。滚动的持续时间可以通过构造函数传递,并且可以指定滚动动作的持续的最长时间。经过这段时间,滚动会自动定位到最终位置,并且通过computeScrollOffset()会得到的返回值为false,表明滚动动作已经结束。

  三、构造函数

  public Scroller (Context context)

  使用缺省的持续持续时间和动画插入器创建一个Scroller。(译者注:interpolator这里翻译为动画插入器,见这里。)

  public Scroller (Context context, Interpolator interpolator)

  根据指定的动画插入器创建一个Scroller,如果指定的动画插入器为空,则会使用缺省的动画插入器(粘滞viscous)创建。

  四、公共方法

  public void abortAnimation ()

  停止动画。与forceFinished(boolean)相反,Scroller滚动到最终x与y位置时中止动画。

  参见

        forceFinished(boolean)

  public boolean computeScrollOffset ()

  当想要知道新的位置时,调用此函数。如果返回true,表示动画还没有结束。位置改变以提供一个新的位置。

  public void extendDuration (int extend)

  延长滚动动画时间。此函数允许当使用setFinalX(int) or setFinalY(int) 时,卷动动作持续更长时间并且卷动更长距离。

  参数

  extend 卷动事件延长的时间,以毫秒为单位

  参见

              setFinalX(int)

              setFinalY(int)

  public void fling (int startX, int startY, int velocityX, int velocityY, int minX, int maxX, int minY, int maxY)

  在fling(译者注:快滑,用户按下触摸屏、快速移动后松开)手势基础上开始滚动。滚动的距离取决于fling的初速度。

  参数

  startX 滚动起始点X坐标

  startY 滚动起始点Y坐标

  velocityX   当滑动屏幕时X方向初速度,以每秒像素数计算

  velocityY   当滑动屏幕时Y方向初速度,以每秒像素数计算

  minX    X方向的最小值,scroller不会滚过此点。

  maxX    X方向的最大值,scroller不会滚过此点。

  minY    Y方向的最小值,scroller不会滚过此点。

  maxY    Y方向的最大值,scroller不会滚过此点。

  public final void forceFinished (boolean finished)

  强制终止的字段到特定值。(译者注:立即停止滚动?)

  参数

  finished    新的结束值

  public final int getCurrX ()

  返回当前滚动X方向的偏移

  返回值

  距离原点X方向的绝对值

  public final int getCurrY ()

  返回当前滚动Y方向的偏移

  返回值

  距离原点Y方向的绝对值

  public final int getDuration ()

  返回滚动事件的持续时间,以毫秒计算。

  返回值

  滚动持续的毫秒数

  public final int getFinalX ()

  返回滚动结束位置。仅针对“fling”手势有效

  返回值

  最终位置X方向距离原点的绝对距离

  public final int getFinalY ()

  返回滚动结束位置。仅针对“fling”操作有效

  返回值

  最终位置Y方向距离原点的绝对距离

  public final int getStartX ()

  返回滚动起始点的X方向的偏移

  返回值

  起始点在X方向距离原点的绝对距离

  public final int getStartY ()

  返回滚动起始点的Y方向的偏移

  返回值

  起始点在Y方向距离原点的绝对距离

  public final boolean isFinished ()

  返回scroller是否已完成滚动。

  返回值

  停止滚动返回true,否则返回false

  public void setFinalX (int newX)

  设置scroller的X方向终止位置

  参数

  newX    新位置在X方向距离原点的绝对偏移。

  参见

          extendDuration(int)

         setFinalY(int)

  public void setFinalY (int newY)

  设置scroller的Y方向终止位置

  参数

  newY    新位置在Y方向距离原点的绝对偏移。

  参见

          extendDuration(int)

          setFinalY(int)

  public void startScroll (int startX, int startY, int dx, int dy)

  以提供的起始点和将要滑动的距离开始滚动。滚动会使用缺省值250ms作为持续时间。

  参数

  startX 水平方向滚动的偏移值,以像素为单位。正值表明滚动将向左滚动

  startY 垂直方向滚动的偏移值,以像素为单位。正值表明滚动将向上滚动

  dx 水平方向滑动的距离,正值会使滚动向左滚动

  dy 垂直方向滑动的距离,正值会使滚动向上滚动

  public void startScroll (int startX, int startY, int dx, int dy, int duration)

  以提供的起始点和将要滑动的距离开始滚动。

  参数

  startX 水平方向滚动的偏移值,以像素为单位。正值表明滚动将向左滚动

  startY 垂直方向滚动的偏移值,以像素为单位。正值表明滚动将向上滚动

  dx 水平方向滑动的距离,正值会使滚动向左滚动

  dy 垂直方向滑动的距离,正值会使滚动向上滚动

        duration    滚动持续时间,以毫秒计。

  public int timePassed ()

  返回自滚动开始经过的时间

  返回值

    经过时间以毫秒为单位

android绘制一个圆,点哪画哪,走哪动哪相关推荐

  1. android迷宫图像生成,Android - 绘制一个迷宫,以平滑的角色移动的画布

    我目前正在创建一个基于Tile的游戏,它基本上使用2套布尔值数组绘制一个迷宫,以确定每个墙壁需要绘制的位置.Android - 绘制一个迷宫,以平滑的角色移动的画布 我有这个所有的工作,因为它应该只有 ...

  2. 如何绘制一个圆的不同方法技巧

    之前和大家分享了很多不同的CAD制图技 巧,这对于我们日常的制图工作很有帮助.若是一个CAD制图初学的小伙伴,该如何简单绘制一个圆呢?今天就和初学CAD制图的小伙伴们分享一下,如何绘制一个圆的不同方法 ...

  3. html 怎么在画布上绘制一个圆,javascript – 如何在画布上画一个圆圈?

    我使用 javascript和画布绘制一个数学设计的尺度(用于测量扭矩,包括牛顿米和英尺磅).我已经用三角法来定位我的刻度,自然地用弧线绘制电弧线.问题来了,当他们需要排队,但有一些奇怪的失真.然后我 ...

  4. android canvas空心圆,用canvas画实心圆和空心圆的方法

    用canvas画实心圆和空心圆的方法 发布时间:2020-09-14 10:19:25 来源:亿速云 阅读:260 作者:小新 这篇文章给大家分享的是有关用canvas画实心圆和空心圆的方法的内容.小 ...

  5. python绘制一个圆_Python在网格上绘制一个填充的“圆”

    你能提供一个在任意位置和半径的网格中绘制圆(ish)形状的有效算法吗?在. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...

  6. android 动态添加颜色,Android绘制一个三角形并且可动态改变颜色

    方法一: 这种方法的三角形角度没法控制,因为其实是矩形旋转. android:fromDegrees="45" android:pivotX="135%" an ...

  7. android绘制实心圆、空心圆

    方式一:自定义view: 只需重写ondraw方法. public class CIrcleImageView extends View {@Overrideprotected void onDraw ...

  8. python绘制一个圆当按下键盘的上下边缘会变大和变小_元贝驾考 模拟考

    1 黄灯持续闪烁,表示机动车可以加速通过.查看本题分析 2 打开机动车车门时,不得妨碍其他车辆和行人通行.查看本题分析 3 使用其他机动车号牌.行驶证的一次记3分.查看本题分析 4 车辆进入山区道路后 ...

  9. 安卓Android绘制一个信息填写页面,使用了三种事件监听方法

    先上效果图片: 第一种,匿名内部类 //设置提交按钮监听submitButton.setOnClickListener(new View.OnClickListener() {@Overridepub ...

最新文章

  1. 服务器 kvm 进入系统,服务器CAT5 KVM切换器系统
  2. 值传递、指针传递、引用传递的区别
  3. 公需科目必须学吗_化学难吗?
  4. 【网址收藏】win10 VirtualBox安装CentOS 7教程
  5. 阿里开源Canal--①简介
  6. python科学计算笔记(十一)pandas中date_range生成指定日期
  7. c/c++整理--析构函数
  8. ModChip and more
  9. 华为云GaussDB:发挥生态优势,培养应用型DBA
  10. 在VS.NET2003中使用XHTML的插件--HTML TIDY 及 MindManger
  11. 微软亚研院 | 智能信息检索综述
  12. java提高篇之理解java的三大特性——继承
  13. linux 下 dhcp failover相关
  14. 计算机桌面图标往左进去只能看见一半,win7系统桌面图标只显示一半另外一半显示别的程序的解决方法...
  15. 第三届上海大学生网络安全大赛 流量分析
  16. 17-内部类的基本概念
  17. 2021年高考成绩查询无为二中,清北保送生公示:安徽仅3人,2021年安徽985录取率还会垫底吗?...
  18. export ‘createStore‘ (imported as ‘createStore‘) was not found in ‘./store/index.js‘ (possible expor
  19. SNA社交网络R语言分析
  20. Java培训包就业的机构

热门文章

  1. 交通信息服务器图片,交通标志图片大全(图文解释)
  2. scheduled一分钟执行一次_Spring 中使用 @Scheduled 创建定时任务
  3. 中学生应该养成的良好习惯
  4. 【渝粤教育】 国家开放大学2020年春季 1332中文学科论文写作 参考试题
  5. 临沂大学 计算机学院,2018临沂大学首届计算机文化节组织动员大会
  6. 百度地图API基本使用(一)
  7. 光学透明胶片行业现状调研及趋势分析报告
  8. 渲云渲染农场怎么样?云渲染价格便宜吗?
  9. bit feild and CPU endian 位域和大小端
  10. 人工智能基础——知识的概念