一个可交互的Android绘制曲线的demo:
package com.ray.demo;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.graphics.Point;
import android.graphics.RectF;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
public class LineFunActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new SampleView(this));
}
private class SampleView extends View{
public static final int RECT_SIZE = 8;
private Point mSelectedPoint = null;
public static final int POINT_ARRAY_SIZE = 7;
public static final int C_START = 0;
public static final int C_END = 1;
public static final int C_CONTROL_1 = 2;
public static final int C_CONTROL_2 = 3;
public static final int Q_START = 4;
public static final int Q_END = 5;
public static final int Q_CONTROL = 6;
private Point[] mPoints = new Point[POINT_ARRAY_SIZE];
public SampleView(Context context) {
super(context);
mPoints[C_START] = new Point(100,100);
mPoints[C_END] = new Point(200,200);
mPoints[C_CONTROL_1] = new Point (150,100);
mPoints[C_CONTROL_2] = new Point(150,200);
mPoints[Q_START] = new Point(100,300);
mPoints[Q_END] = new Point(150,400);
mPoints[Q_CONTROL] = new Point(200,350);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
// set up paint
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.BLACK);
// draw the cubic line
Path path = new Path();
path.moveTo(mPoints[C_START].x,mPoints[C_START].y);
path.cubicTo(mPoints[C_CONTROL_1].x, mPoints[C_CONTROL_1].y,
mPoints[C_CONTROL_2].x, mPoints[C_CONTROL_2].y,
mPoints[C_END].x, mPoints[C_END].y);
paint.setStrokeWidth(2);
paint.setStyle(Style.STROKE);
canvas.drawPath(path, paint);
canvas.drawLine(mPoints[C_START].x,mPoints[C_START].y,
mPoints[C_CONTROL_1].x, mPoints[C_CONTROL_1].y, paint);
canvas.drawLine(mPoints[C_END].x, mPoints[C_END].y,
mPoints[C_CONTROL_2].x, mPoints[C_CONTROL_2].y, paint);
// draw the quad line
paint.setColor(Color.BLACK);
paint.setStyle(Style.FILL);
paint.setStrokeWidth(2);
path.reset();
path.moveTo(mPoints[Q_START].x, mPoints[Q_START].y);
path.quadTo(mPoints[Q_CONTROL].x, mPoints[Q_CONTROL].y,
mPoints[Q_END].x, mPoints[Q_END].y);
canvas.drawPath(path, paint);
canvas.drawLine(mPoints[Q_START].x, mPoints[Q_START].y,
mPoints[Q_CONTROL].x, mPoints[Q_CONTROL].y, paint);
canvas.drawLine(mPoints[Q_END].x, mPoints[Q_END].y,
mPoints[Q_CONTROL].x, mPoints[Q_CONTROL].y, paint);
// draw control points
paint.setColor(Color.RED);
paint.setStyle(Style.FILL);
for (int i=0; i<POINT_ARRAY_SIZE; i++){
canvas.drawRect(pointToRect(mPoints[i]),paint);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
for (int i=0; i<POINT_ARRAY_SIZE; i++){
if (pointToRect(mPoints[i]).contains(event.getX(),event.getY())){
mSelectedPoint = mPoints[i];
}
}
break;
case MotionEvent.ACTION_MOVE:
if ( null != mSelectedPoint){
mSelectedPoint.x = (int) event.getX();
mSelectedPoint.y = (int) event.getY();
invalidate();
}
break;
case MotionEvent.ACTION_UP:
mSelectedPoint = null;
break;
default:
break;
}
return true;
}
private RectF pointToRect(Point p){
return new RectF(p.x -RECT_SIZE/2, p.y - RECT_SIZE/2,
p.x + RECT_SIZE/2, p.y + RECT_SIZE/2);
}
}
}
分享到:
相关推荐
android自定义曲线图,一个测试小demo,测试运行没问题,可以根据自己的需求做改动
Android 绘制贝塞尔曲线Demo源码.rar
一个简单的动态曲线绘制demo,用到了XYMultipleSeriesRenderer。
android图表绘制工具,功能非常强大,几乎涵盖了所有的图表种类。 这是目前最新的版本:1.1.0 包含了3个文件: achartengine-1.1.0.jar, achartengine-1.1.0-demo-source.zip, achartengine-1.1.0-javadocs.zip ...
绘制直线,二阶贝塞尔曲线,制成绘制波浪自定义控件,能够动画且进度控制执行
Android图表生成类库Demo
自定义的动态曲线时轴思路版已实现动态绘制虚曲线及爱心动画,仿百度生活手记,恋爱时光卡片具体讲解看注释 基于IDEA的android工程源码demo
Curve-Fit Android库,用于在Google Maps上绘制曲线。 该库使用Bezier三次方程式来计算曲线的所有中间点。 更改请注意,此版本仅适用于Curve-Fit Android库,用于在Google Maps上绘制曲线。 该库使用Bezier三次方程...
内包含android画直线、箭头、折线(平移、定义点击事件)demo源码
通过de Casteljau算法绘制贝塞尔曲线,并计算它的切线,实现1-7阶贝塞尔曲线的形成动画。 德卡斯特里奥算法可以计算出Bezier曲线上的一个点,进而绘制出Bezier曲线。想深入了解德卡斯特里奥算法的同学可以参考我翻译...
最近看了一下 Android 上的图表控件,去年做过一款应用也已上架了,也用到了图表控件,但是只是按照官方 demo 集成了,并没有过多的研究。 我最近基本上是面向 Github 编程了,拿别人造好的轮子拿来用,不能直接用的...
本文实例讲述了Android编程之canvas绘制各种图形的方法。分享给大家供大家参考,具体如下: 1、首先说一下canvas类: Class Overview The Canvas class holds the “draw” calls. To draw something, you need 4 ...
使用MPAndroidChart绘制波形图,定时动态添加数据,需要注意的是动态添加需在主线程中执行。
绘制曲线图Chart效果,绘制曲线图,可以自适应水平或者垂直的屏幕方向。Demo中,绘制了正弦函数,喜欢朋友可以收藏起来,。The following code was used to generate the chart in the image below. Custom ...
本 demo主要音频的录制和播放分别使用两个AsyncTask来完成,时时录制并外放声音实现助听,时时录制存储成pcm文件,另外更复杂的一个项目实现了时时录制、时时存储pcm裸文件、时时外放声音、时时绘制曲线图,提供调节...
1、获取各个动画执行对象的起点和终点的坐标,利用PathMeasure绘制绘制贝塞尔曲线; 2、为商品图片设置属性动画; 3、为动画设置addUpdateListene监听器,更新view的坐标。 效果图: MainActivity.java package ...
15年年中做过的一款APP的部分UI,使用了一些还算不错的自定义view以及动画效果,当初很认真的做的一款APP,很遗憾项目停掉了,过去一年多了,现在把业务代码...绘制小球移动效果其它效果看图就明白了Demo效果GIF截图
其原理是通过摄像头闪光灯发出来的光,通过闪光灯识别手指的血管,读取摄像头红色素平均值/明暗变化,绘制心率曲线,检测曲线上下脉冲,计算心率值. 若要自己搭建一个服务器环境,请将本项目对应服务端部署好,并修改本...
ChartView介绍: 绘制曲线图,可以自适应水平或者垂直的屏幕方向。Demo中,绘制了正弦函数。 测试环境: Eclipse 4.2, Android 3.0 以上。 注意:测试环境并不代表适用环境。
基于achartengine的Android源码,画的是折线图随x轴为时间轴移动并实时更新数据,首先绘制时间轴的曲线图。自己制作的一个简单的demo,希望给你有用。