在android的ApiDemos中,画任意曲线(在FingerPaint这个例子中)的主要代码如下:
private float mX, mY;
private static final float TOUCH_TOLERANCE = 1;//这里我改为1
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);
// commit the path to our offscreen
mCanvas.drawPath(mPath, mPaint);
// kill this so we don't double draw
mPath.reset();
}
当你迅速的点击鼠标、移动鼠标、松开鼠标, 大概200-300次会出现2-3次,在移动鼠标的过程中,从点(0,0)到鼠标移动位置的坐标,的直线。如附件所示。究其原因是,在touch_move函数中的quadTo语句(If no moveTo() call has been made for this contour, the first point is automatically set to (0,0).),如果在调用quadTo没有调用moveTo函数,则自动设置起始点为(0,0)。我的想法是,在每调用一次quadTo之前,人为调用moveTo一次,并且只有调用moveTo成功的情况下,才调用quadTo,如下代码所示:
private float mX, mY;
private static final float TOUCH_TOLERANCE = 1;//这里我改为1
/**是否设置moveTo函数的标志位*/
private boolean isSetMoveTo = false;
/**是否可以调用quadTo*/
private boolean isQuadTo = false;
/**quadTo语句的上一个结束点的X坐标*/
private float lastPointXBefore = 0.0f;
/**quadTo语句的上一个结束点的Y坐标*/
private float lastPointYBefore = 0.0f;
private void touch_start(float x, float y) {
mPath.reset();
mPath.moveTo(x, y);
mX = x;
mY = y;
isSetMoveTo = false;
}
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) {
if(isSetMoveTo)
{
mPath.moveTo(lastPointXBefore, lastPointYBefore);
isQuadTo = true;
}
if(isQuadTo)
{
mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
isQuadTo = false;
}
isSetMoveTo = true;
lastPointXBefore = (x + mX) / 2;
lastPointYBefore = (y + mY) / 2;
mX = x;
mY = y;
}
}
private void touch_up() {
mPath.lineTo(mX, mY);
// commit the path to our offscreen
mCanvas.drawPath(mPath, mPaint);
// kill this so we don't double draw
mPath.reset();
}
在增加了以上代码后,我又测试了300次,没有出现附件中的情况,特此记录。
- 大小: 60.3 KB
分享到:
相关推荐
Android 贝塞尔曲线动画 拿去直接用
Android 自定义 直线箭头和曲线箭头 ,支持自定义颜色,通过两个或者三个坐标,绘制出来所需要的箭头 ,根据赛贝尔曲线及正切余弦等函数计算出箭头方向
android 画曲线图 画三角形(多边形),可以画成股票K线图,儿童成长曲线等,使用android的canvas
Android studio利用Achartengine库画手机自带传感器实时数据,并实时显示曲线,可以导出历史数据等
Android画曲线图+XYMultipleSeriesRenderer画曲线图和折线图,已封装好,可以拿来直接用
直播平台中点击心形进行贝塞尔曲线运动
这是一个android动画循环移动的demo,实现了两个动画交替播放的功能。
汇总的Android下常见曲线图,附带源码,有些没有验证过
Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)
内包含android画直线、箭头、折线(平移、定义点击事件)demo源码
Android 图片任意移动效果 ,涉及到得安卓知识点比较重要。特来分享。
这是一个Android实时动态曲线实例,在数据采集后显示
Android实时动态曲线
Android下一款画实时曲线图的工具,数据通过网络传输的
Android应用源码之安卓画曲线图代码.zip
Android抖动动画效果(上下抖和以角旋转)
一个在android opengl 上实现的 贝塞尔曲线
android AndEngine游戏画直线、画矩形源码。充分使用AndEngine游戏引擎,一步一般讲解了实现画直线,和画矩形的功能。
利用achartengine实现的实时曲线图,其中有两种实现方式(含四种表现方式),使用时请先将android-support-v7-appcompat导入,然后导入RealTimeChart,导入完成后,修改Library引用,方法如下:右击RealTimeChart...