sensorManager实现小球滚动

来源:互联网 发布:cosmic数据库介绍 编辑:程序博客网 时间:2024/05/29 17:34

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>
2、创建vo

public class Ball {private float x;private float y;private float r;private Bitmap ballImg;private float xSpeed;private float ySpeed;public Ball(Resources res) {ballImg = BitmapFactory.decodeResource(res, R.drawable.ball);Matrix m = new Matrix();m.postScale((MainActivity.SCREEN_WIDTH / 10f) / ballImg.getWidth(),(MainActivity.SCREEN_WIDTH / 10f) / ballImg.getHeight());ballImg = Bitmap.createBitmap(ballImg, 0, 0, ballImg.getWidth(),ballImg.getHeight(), m, false);x = 0;y = 0;r = ballImg.getWidth() / 2;}public void draw(Canvas canvas, Paint paint) {canvas.drawBitmap(ballImg, x, y, paint);x += xSpeed;y += ySpeed;if (x < 0) {x = 0;}if (x > MainActivity.SCREEN_WIDTH - r * 2) {x = MainActivity.SCREEN_WIDTH - r * 2;}if (y < 0) {y = 0;}if (y > MainActivity.SCREEN_HEIGHT - r * 2) {y = MainActivity.SCREEN_HEIGHT - r * 2;}}public void setSpeed(float xSpeed, float ySpeed) {this.xSpeed = xSpeed;this.ySpeed = ySpeed;}}
3、创建View

public class MyView extends View {private Ball ball;public MyView(Context context, AttributeSet attrs) {super(context, attrs);ball = new Ball(getResources());setBackgroundResource(R.drawable.gamebg);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Paint paint = new Paint();// 画图if (ball != null) {ball.draw(canvas, paint);}}public Ball getBall() {return ball;}}
4、在Activity中实现功能

public class MainActivity extends Activity {// private TextView content;private MyView myView;public static int SCREEN_WIDTH;public static int SCREEN_HEIGHT;private boolean flag = true;@SuppressWarnings("deprecation")@Overrideprotected 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);final SensorManager manager = (SensorManager) getSystemService(SENSOR_SERVICE);// 建立传感器对象Sensor s = manager.getDefaultSensor(Sensor.TYPE_ORIENTATION);// 设置监听,当传感器中的值有变化时,自动进行监听反馈manager.registerListener(new SensorEventListener() {@Overridepublic 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.getBall().setSpeed(-values[2], -values[1]);}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}}, s, SensorManager.SENSOR_DELAY_GAME);Thread t = new Thread() {@Overridepublic void run() {while (flag) {try {Thread.sleep(1000 / 30);} catch (Exception e) {e.printStackTrace();}myView.postInvalidate();}}};t.start();}@Overrideprotected void onDestroy() {flag = false;super.onDestroy();}}





0 0
原创粉丝点击