您的位置:首页 > 移动开发 > Android开发

一个简易的指南针

2015-11-06 20:42 477 查看
今天看了一下Android的传感器的使用,并做了一个简易的指南针。其界面如下:这个例子简单,非常适合初学者学习。 在使用传感器需要注意的地方是传感器的注册和注销,它们分别放在onResume和onPause中实现,如:
@Override
protected void onResume() {
super.onResume();

if (mOrientationSensor != null) {
//Register sensor
mSensorManager.registerListener( this,
mOrientationSensor, SensorManager.SENSOR_DELAY_FASTEST);
} else {
Toast.makeText(this, R.string.cannot_get_sensor, Toast.LENGTH_SHORT)
.show();
}
}

@Override
protected void onPause() {
super.onPause();

if (mOrientationSensor != null) {
//Unregister sensor
mSensorManager.unregisterListener(this);
}
}
除了传感器的使用,这个例子还有一个特点是罗盘的绘制。它充分展现了canvas在绘图过程中的灵活性。onDraw的代码如下:
@Override
protected void onDraw(Canvas canvas) {
int mMeasuredWidth = getMeasuredWidth();
int mMeasuredHeight = getMeasuredHeight();

int px = mMeasuredWidth / 2;
int py = mMeasuredHeight / 2;

int radius = Math.min(px, py);

// Draw the background
canvas.drawCircle(px, py, radius, circlePaint);

// Rotate our perspective so that the top' is
// facing the current bearing.
canvas.save();
canvas.rotate(-bearing, px, py);

int textWidth = (int) textPaint.measureText("W");
int cardinalX = px - textWidth / 2;
int cardinalY = py - radius + textHeight;

// Draw the marker every 15 degrees and text every 45.
for (int i = 0; i < 24; i++) {
// Draw a marker.
canvas.drawLine(px, py - radius, px, py - radius + 10, markerPaint);

canvas.save();
canvas.translate(0, textHeight);

// Draw the cardinal points
if (i % 6 == 0) {
String dirString = "";
switch (i) {
case (0): {
dirString = northString;
//Draw the compass pointer
int arrowY0 = 2 * textHeight + py - radius;
int arrowY1 = py + radius - 4 * textHeight;
canvas.drawLine( px, arrowY0, px - 5, py, markerPaint );
canvas.drawLine( px, arrowY0, px + 5, py, markerPaint );
canvas.drawLine( px-5, py, px, arrowY1, markerPaint );
canvas.drawLine( px+5, py, px, arrowY1, markerPaint );
break;
}
case (6):
dirString = eastString;
break;
case (12):
dirString = southString;
break;
case (18):
dirString = westString;
break;
}
canvas.drawText(dirString, cardinalX, cardinalY, textPaint);
} else if (i % 3 == 0) {
// Draw the text every alternate 45deg
String angle = String.valueOf(i * 15);
float angleTextWidth = textPaint.measureText(angle);

int angleTextX = (int) (px - angleTextWidth / 2);
int angleTextY = py - radius + textHeight;
canvas.drawText(angle, angleTextX, angleTextY, textPaint);
}
canvas.restore();

canvas.rotate(15, px, py);
}
canvas.restore();
}
源代码

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息