您的位置:首页 > 其它

sensorManager实现小球滚动

2014-06-20 20:31 423 查看
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);
}

@Override
protected 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")
@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);

final 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.getBall().setSpeed(-values[2], -values[1]);

}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}, s, SensorManager.SENSOR_DELAY_GAME);

Thread t = new Thread() {
@Override
public void run() {
while (flag) {
try {
Thread.sleep(1000 / 30);
} catch (Exception e) {
e.printStackTrace();
}
myView.postInvalidate();
}
}
};
t.start();

}

@Override
protected void onDestroy() {
flag = false;
super.onDestroy();
}

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