package com.android;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class ActivityMain extends Activity {
/** Tag string for our debug logs */
private static final String TAG = "ActivityMain";
//传感器管理器
private SensorManager mSensorManager;
//显示的视图
private GraphView mGraphView;
private class GraphView extends View implements SensorEventListener{
private Bitmap mBitmap;
private Paint mPaint = new Paint();
private Canvas mCanvas = new Canvas();
private Path mPath = new Path();
private RectF mRect = new RectF();
//保存6条线的y值
private float mLastValues[] = new float[3*2];
//方位的x y z 的值
private float mOrientationValues[] = new float[3];
//6条线,6个颜色
private int mColors[] = new int[3*2];
private float mLastX;
private float mScale[] = new float[2];
private float mYOffset;
private float mMaxX;
private float mSpeed = 1.0f;
private float mWidth;
private float mHeight;
public GraphView(Context context) {
super(context);
//紫蓝绿 表示加速度变化
mColors[0] = Color.MAGENTA; //紫色x
mColors[1] = Color.BLUE; //蓝色y
mColors[2] = Color.GREEN; //绿色z
//红黄黑 标识磁场变化
mColors[3] = Color.RED; //红色x
mColors[4] = Color.YELLOW; //黄色y
mColors[5] = Color.BLACK; //黑色z
mPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
mRect.set(-0.5f, -0.5f, 0.5f, 0.5f);
mPath.arcTo(mRect, 0, 180);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565);
mCanvas.setBitmap(mBitmap);
mCanvas.drawColor(0xFFFFFFFF);
mYOffset = h * 0.5f;
mScale[0] = - (h * 0.5f * (1.0f / (SensorManager.STANDARD_GRAVITY * 2)));
mScale[1] = - (h * 0.5f * (1.0f / (SensorManager.MAGNETIC_FIELD_EARTH_MAX)));
mWidth = w;
mHeight = h;
if (mWidth < mHeight) {
mMaxX = w;
} else {
mMaxX = w-50;
}
mLastX = mMaxX;
super.onSizeChanged(w, h, oldw, oldh);
}
@Override
protected void onDraw(Canvas canvas) {
synchronized (this) {
if (mBitmap != null) {
final Paint paint = mPaint;
final Path path = mPath;
final int outer = 0xFFC0C0C0;
final int inner = 0xFFff7010;
if (mLastX >= mMaxX) {
mLastX = 0;
final Canvas cavas = mCanvas;
final float yoffset = mYOffset;
final float maxx = mMaxX;
final float oneG = SensorManager.STANDARD_GRAVITY * mScale[0];
paint.setColor(0xFFAAAAAA);
cavas.drawColor(0xFFFFFFFF);
cavas.drawLine(0, yoffset,maxx, yoffset,paint);
cavas.drawLine(0, yoffset+oneG, maxx, yoffset+oneG, paint);
cavas.drawLine(0, yoffset-oneG, maxx, yoffset-oneG, paint);
}
canvas.drawBitmap(mBitmap, 0, 0, null);
float[] values = mOrientationValues;
if (mWidth < mHeight) {
float w0 = mWidth * 0.333333f;
float w = w0 - 32;
float x = w0*0.5f;
//表示方向的视图
for (int i=0 ; i<3 ; i++) {
canvas.save(Canvas.MATRIX_SAVE_FLAG);
canvas.translate(x, w*0.5f + 4.0f);
canvas.save(Canvas.MATRIX_SAVE_FLAG);
paint.setColor(outer);
canvas.scale(w, w);
canvas.drawOval(mRect, paint);
canvas.restore();
canvas.scale(w-5, w-5);
paint.setColor(inner);
canvas.rotate(-values[i]);
canvas.drawPath(path, paint);
canvas.restore();
x += w0;
}
} else {
float h0 = mHeight * 0.333333f;
float h = h0 - 32;
float y = h0*0.5f;
for (int i=0 ; i<3 ; i++) {
canvas.save(Canvas.MATRIX_SAVE_FLAG);
canvas.translate(mWidth - (h*0.5f + 4.0f), y);
canvas.save(Canvas.MATRIX_SAVE_FLAG);
paint.setColor(outer);
canvas.scale(h, h);
canvas.drawOval(mRect, paint);
canvas.restore();
canvas.scale(h-5, h-5);
paint.setColor(inner);
canvas.rotate(-values[i]);
canvas.drawPath(path, paint);
canvas.restore();
y += h0;
}
}
}
}
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
Sensor sensor = event.sensor;
int type = sensor.getType();
float[] values = event.values;
synchronized (this) {
if (mBitmap != null) {
final Canvas canvas = mCanvas;
final Paint paint = mPaint;
if (type == Sensor.TYPE_ORIENTATION) {
for (int i=0 ; i<3 ; i++) {
//值[0]:绕Z轴方位角,0=North, 90=East, 180=South, 270=West
//值[1]:绕X轴角度 (-180 to 180)
//值[2]:绕Y轴角度(-90 to 90)
mOrientationValues[i] = values[i];
}
} else if(type == Sensor.TYPE_MAGNETIC_FIELD){
float deltaX = mSpeed;
float newX = mLastX + deltaX;
//支持地磁传感器就画后3条地磁线
for (int i=0 ; i<3 ; i++) {
int k = i+3;
final float v = mYOffset + values[i] * mScale[1];
paint.setColor(mColors[k]);
canvas.drawLine(mLastX, mLastValues[k], newX, v, paint);
mLastValues[k] = v;
}
mLastX += mSpeed;
}else if(type == Sensor.TYPE_ACCELEROMETER){
float deltaX = mSpeed;
float newX = mLastX + deltaX;
//支持加速度传感器画前三条加速度线
for (int i=0 ; i<3 ; i++) {
final float v = mYOffset + values[i] * mScale[0];
paint.setColor(mColors[i]);
canvas.drawLine(mLastX, mLastValues[i], newX, v, p
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
赵启明Android典型技术模块开发详解(源码 最全) 赵启明著 (2000个子文件)
IUserService.aidl 384B
IUserService.aidl 384B
IUserService.aidl 384B
IUserService.aidl 384B
IService.aidl 216B
IService.aidl 216B
UserP.aidl 89B
UserP.aidl 89B
UserP.aidl 89B
UserP.aidl 89B
resources.ap_ 199KB
resources.ap_ 199KB
resources.ap_ 195KB
resources.ap_ 188KB
resources.ap_ 94KB
resources.ap_ 81KB
resources.ap_ 77KB
resources.ap_ 77KB
resources.ap_ 77KB
resources.ap_ 77KB
resources.ap_ 77KB
resources.ap_ 67KB
resources.ap_ 61KB
resources.ap_ 60KB
resources.ap_ 32KB
resources.ap_ 27KB
resources.ap_ 24KB
resources.ap_ 20KB
resources.ap_ 19KB
resources.ap_ 15KB
resources.ap_ 15KB
resources.ap_ 14KB
resources.ap_ 14KB
resources.ap_ 13KB
resources.ap_ 13KB
resources.ap_ 13KB
resources.ap_ 13KB
resources.ap_ 13KB
resources.ap_ 13KB
resources.ap_ 12KB
resources.ap_ 12KB
resources.ap_ 12KB
resources.ap_ 12KB
resources.ap_ 12KB
resources.ap_ 12KB
resources.ap_ 12KB
resources.ap_ 12KB
resources.ap_ 12KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
我ri
- 粉丝: 0
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功