package com.cqut.fib123.searisebttest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Point;
import android.graphics.RectF;
import android.graphics.Paint.Style;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
/**
*
*
*
*/
@SuppressLint("ViewConstructor")
class MyChartView extends View{
public static final int RECT_SIZE = 10;
private Point mSelectedPoint;
public double num;
public double morenum=0;
//枚举实现坐标桌面的样式风栿
public static enum Mstyle {
Line,Curve
}
private Mstyle mstyle=Mstyle.Line;
// private Point[] mPoints = new Point[100];
Point[] mPoints = new Point[100];
Context context;
int bheight=0;
HashMap<Double, Double> map;
ArrayList<Double> dlk;
int totalvalue=30;
int pjvalue=5;
String xstr,ystr="";//横纵坐标的属怿
int margint=15;
int marginb=40;
int c=0;
int resid=0;
Boolean isylineshow;
/**
* @param map 霿要的数据,虽然key是double,但是只用于排序和显示,与横向距离无兿
* @param totalvalue Y轴的朿大忿
* @param pjvalue Y平均倿
* @param xstr X轴的单位
* @param ystr Y轴的单位
* @param isylineshow 是否显示纵向网格
* @ return
*/
public void SetTuView(HashMap<Double, Double> map,int totalvalue,int pjvalue,String xstr,String ystr,Boolean isylineshow) {
this.map=map;
this.totalvalue=totalvalue;
this.pjvalue=pjvalue;
this.xstr=xstr;
this.ystr=ystr;
this.isylineshow=isylineshow;
}
public MyChartView(Context ct) {
super(ct);
this.context=ct;
}
public MyChartView(Context ct, AttributeSet attrs) {
super( ct, attrs );
this.context=ct;
}
public MyChartView(Context ct, AttributeSet attrs, int defStyle) {
super( ct, attrs, defStyle );
this.context=ct;
}
@SuppressLint("DrawAllocation")
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(c!=0)
this.setbg(c);
if(resid!=0)
this.setBackgroundResource(resid);
dlk=getintfrommap(map);
int height=getHeight();
if(bheight==0)
bheight=height-marginb;
int width=getWidth();
int blwidh=dip2px(context,50);
int pjsize=totalvalue/pjvalue;//界面布局的尺寸的比例
// set up paint
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.BLACK);
paint.setStrokeWidth(1);
paint.setStyle(Style.STROKE);
for(int i=0;i<pjsize+1;i++)//将顶点的线变为红色的 警戒线
{
if(i==pjsize)
paint.setColor(Color.BLACK);
canvas.drawLine(blwidh,bheight-(bheight/pjsize)*i+margint,width,bheight-(bheight/pjsize)*i+margint, paint);//Y坐标
drawline(pjvalue*i+ystr, blwidh/2, bheight-(bheight/pjsize)*i+margint, canvas);
}
// ArrayList<Integer> xlist=new ArrayList<Integer>();//记录每个x的忿
ArrayList<Integer> xlist=new ArrayList<>();//记录每个x的忿
//画直线(纵向_
paint.setColor(Color.BLACK);
if(dlk==null)
return;
for(int i=0;i<7;i++)
{
xlist.add(blwidh+(width-blwidh)/7*i);
if(isylineshow)
{
canvas.drawLine(blwidh+(width-blwidh)/7*i,margint,blwidh+(width-blwidh)/7*i,bheight+margint, paint);
}
num=i+morenum;
drawline(num+xstr, blwidh+(width-blwidh)/7*i, bheight+40, canvas);//X坐标
}
//点的操作设置
mPoints=getpoints(dlk, map, xlist, totalvalue, bheight);
paint.setColor(Color.BLUE);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(0);
drawline(mPoints, canvas, paint);
paint.setColor(Color.RED);
paint.setStyle(Style.FILL);
for (int i=0; i<mPoints.length; 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<mPoints.length; i++)
{
if (pointToRect(mPoints[i]).contains(event.getX(),event.getY()))
{
System.out.println("-yes-"+i);
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);
}
private void drawscrollline(Point[] ps,Canvas canvas,Paint paint) {
Point startp=new Point();
Point endp=new Point();
for(int i=0;i<ps.length-1;i++)
{
startp=ps[i];
endp=ps[i+1];
int wt=(startp.x+endp.x)/2;
Point p3=new Point();
Point p4=new Point();
p3.y=startp.y;
p3.x=wt;
p4.y=endp.y;
p4.x=wt;
Path path = new Path();
path.moveTo(startp.x,startp.y);
path.cubicTo(p3.x, p3.y, p4.x, p4.y,endp.x, endp.y);
canvas.drawPath(path, paint);
}
}
private void drawline(Point[] ps,Canvas canvas,Paint paint) {
Point startp=new Point();
Point endp=new Point();
for(int i=0;i<ps.length-1;i++)
{
startp=ps[i];
endp=ps[i+1];
canvas.drawLine(startp.x,startp.y,endp.x,endp.y, paint);
}
}
private Point[] getpoints(ArrayList<Double> dlk,HashMap<Double, Double> map,ArrayList<Integer> xlist,int max,int h) {
Point[] points=new Point[dlk.size()];
for(int i=0;i<dlk.size();i++)
{
int ph=h-(int)(h*(map.get(dlk.get(i))/max));
points[i]=new Point(xlist.get(i),ph+margint);
}
return points;
}
private void drawline(String text,int x,int y,Canvas canvas) {
Paint p = new Paint();
p.setAlpha(0x0000ff);
p.setTextSize(20);
String familyName = "宋体";
Typeface font = Typeface.create(familyName,Typeface.ITALIC);
p.setTypeface(font);
p.setTextAlign(Paint.Align.CENTER);
canvas.drawText(text, x, y, p);
}
public int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
public int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
@SuppressWarnings("rawtypes")
public ArrayList<Double> getintfrommap(
没有合适的资源?快使用搜索试试~ 我知道了~
AndroidStudio通过蓝牙连接绘制实时温度图
共10个文件
java:10个
2星 需积分: 50 66 下载量 197 浏览量
2019-04-03
17:17:15
上传
评论 19
收藏 16KB RAR 举报
温馨提示
一种基于AndroidStudio的APP,通过蓝牙连接,绘制实时温度图
资源推荐
资源详情
资源评论
收起资源包目录
Bluetest.rar (10个子文件)
Blue
java
com
cqut
fib123
searisebttest
MyChartView.java 11KB
ClientActivity.java 10KB
MainActivity.java 2KB
DeviceListActivity.java 9KB
Tools.java 2KB
util
BluetoothClientService.java 7KB
TransmitBean.java 354B
BluetoothTools.java 4KB
BluetoothClientConnThread.java 2KB
BluetoothCommunThread.java 3KB
共 10 条
- 1
资源评论
- phantom3232019-04-15好像不可以
qq_42206544
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功