1、简单布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<org.lsp.sensordemo.view.MyView
android:id="@+id/my_view"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</org.lsp.sensordemo.view.MyView>
</RelativeLayout>
1、创建Myview类
public class MyView extends View {
private Bitmap a;
private float degree = 0;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
a = BitmapFactory.decodeResource(getResources(), R.drawable.a);
// 将图片大小重新设置
Matrix m = new Matrix();
m.postScale((MainActivity.SCREEN_WIDTH - 20f) / a.getWidth(),
(MainActivity.SCREEN_WIDTH - 20f) / a.getHeight());
a = Bitmap.createBitmap(a, 0, 0, a.getWidth(), a.getHeight(), m, false);
}
public void reDraw(float degree) {
this.degree = degree;
postInvalidate();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
// 画图
if (a != null) {
// 准备进行画布的旋转
canvas.save();
canvas.rotate(-degree + 180, MainActivity.SCREEN_WIDTH / 2,
MainActivity.SCREEN_HEIGHT / 2);
canvas.drawBitmap(a, 10,
(MainActivity.SCREEN_HEIGHT - a.getHeight()) / 2, paint);
canvas.restore();
}
}
}
3、创建Activity类
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SCREEN_WIDTH = getWindowManager().getDefaultDisplay().getWidth();
SCREEN_HEIGHT = getWindowManager().getDefaultDisplay().getHeight();
setContentView(R.layout.activity_main);
// content = (TextView) findViewById(R.id.content);
myView = (MyView) findViewById(R.id.my_view);
SensorManager manager = (SensorManager) getSystemService(SENSOR_SERVICE);
// 建立传感器对象
Sensor s = manager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
// 设置监听,当传感器中的值有变化时,自动进行监听反馈
manager.registerListener(new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
// 当有变化时,自动执行此方法
// 通过event可以取得三个方向的加速度值
float[] values = event.values;
// StringBuilder builder = new StringBuilder();
// builder.append(values[0] + "\r\n");
// builder.append(values[1] + "\r\n");
// builder.append(values[2] + "\r\n");
//
// content.setText(builder.toString());
myView.reDraw(values[0]);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}, s, SensorManager.SENSOR_DELAY_GAME);
}
}