百度地图
记住如何获得数字签名,如何申请PAI key。
无论何种需求、何种查找,在百度给的Demo中都能找到应用
写一个显示地图的最简单的例子
public class MainActivity extends Activity {
MapView mMapView ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
//获取地图控件引用
mMapView = (MapView) findViewById(R.id.bmapView);
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
SurfaceView
重点在于如何将传感器获得的转动角度,传到自己写的SurfaceView中去,然后使画布旋转,需要一个setter方法和handler。
package com.example.administrator.mysensordemo;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
/**
* Created by Administrator on 2015/9/21.
*/
public class MyView extends SurfaceView{
private int width;
private int height;
private Paint mPaint;
private Paint mPaintLine;
private Paint mPaintSign;
private float mDegree;
private Canvas canvas;
public void setmDegree(float mDegree) {
this.mDegree = mDegree;
invalidate();
Log.d("onSensorChanged","旋转角度"+mDegree);
}
public MyView(Context context) {
super(context);
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
SurfaceHolder surfaceHolder = getHolder();//得到Holder
surfaceHolder.addCallback(callback);//绑定Holder的回调
mPaint = new Paint();
mPaint.setColor(Color.RED);
mPaint.setStrokeWidth(10);
mPaint.setAntiAlias(true);
mPaint.setStyle(Paint.Style.STROKE);
mPaintLine = new Paint();
mPaintLine.setColor(Color.GREEN);
mPaintLine.setStrokeWidth(5);
mPaintLine.setAntiAlias(true);
mPaintLine.setStyle(Paint.Style.STROKE);
mPaintSign = new Paint();
mPaintSign.setColor(Color.BLUE);
mPaintSign.setTextSize(40);
mPaintSign.setAntiAlias(true);
mPaintSign.setTextAlign(Paint.Align.CENTER);
mPaintSign.setStyle(Paint.Style.STROKE);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
width = getDefaultSize(getSuggestedMinimumWidth(),widthMeasureSpec);
height = getDefaultSize(getSuggestedMinimumHeight(),heightMeasureSpec);
setMeasuredDimension(width, height);
}
Callback callback = new Callback() {
@Override
public void surfaceCreated(final SurfaceHolder surfaceHolder) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while (true){
canvas = surfaceHolder.lockCanvas();
canvas.drawColor(Color.WHITE);
canvas.save();
canvas.rotate(mDegree, width / 2, height / 2);
canvas.drawCircle(width / 2, height / 2, 300, mPaint);
canvas.drawCircle(width / 2, height / 2, 5, mPaintLine);
canvas.drawLine(width / 2, height / 2, width / 2, height / 2 + 250, mPaintLine);
canvas.drawLine(width / 2, height / 2 + 250, width / 2 - 10, height / 2 + 230, mPaintLine);
canvas.drawLine(width / 2, height / 2+250, width / 2+10, height / 2 + 230, mPaintLine);
// canvas.restore();
// canvas.save();
canvas.drawText("N", width / 2, height / 2 - 260, mPaintSign);
canvas.rotate(90, width / 2, height / 2);
canvas.drawText("E", width / 2, height / 2 - 260, mPaintSign);
canvas.rotate(90, width / 2, height / 2);
canvas.drawText("S", width / 2, height / 2 - 260, mPaintSign);
canvas.rotate(90, width / 2, height / 2);
canvas.drawText("W", width / 2, height / 2 - 260, mPaintSign);
canvas.restore();
surfaceHolder.unlockCanvasAndPost(canvas);
try {
Thread.sleep(40);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
thread.start();
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
}
};
}
传感器(地磁、加速度)
package com.example.administrator.mysensordemo;
import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
public class MainActivity extends Activity {
private SensorManager mSensorManager;
private MyView myView;
private static final int DEGREE = 0X23;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case DEGREE:
float angle = (float) msg.obj;
myView.setmDegree(angle);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myView = (MyView) findViewById(R.id.myview);
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor magneticSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
Sensor accelerometerSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(listener,magneticSensor,SensorManager.SENSOR_DELAY_GAME);
mSensorManager.registerListener(listener,accelerometerSensor,SensorManager.SENSOR_DELAY_GAME);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mSensorManager!=null){
mSensorManager.unregisterListener(listener);
}
}
private SensorEventListener listener = new SensorEventListener() {
float[] accelerometerValues = new float[3];
float[] magneticValues = new float[3];
private float lastRotateDegree;
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
accelerometerValues = sensorEvent.values.clone();
}else if (sensorEvent.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD){
magneticValues = sensorEvent.values.clone();
}
float[] R = new float[9];
float[] values = new float[3];
SensorManager.getRotationMatrix(R, null, accelerometerValues, magneticValues);
SensorManager.getOrientation(R, values);
// Log.d("onSensorChanged","旋转角度"+Math.toDegrees(values[0]));
float rotateDegree = (float) -Math.toDegrees(values[0]);
if (Math.abs(rotateDegree - lastRotateDegree)>1){
// RotateAnimation animation = new RotateAnimation(lastRotateDegree,rotateDegree, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
// animation.setFillAfter(true);
// myView.startAnimation(animation);
Message msg = new Message();
msg.what = DEGREE;
msg.obj = rotateDegree;
handler.sendMessage(msg);
lastRotateDegree = rotateDegree;
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
};
}
2016.10.11