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(); } }
相关文章推荐
- 实现指南针的新方法SensorManager.getOrientation( )
- 20150908 javascript实现来回滚动的小球
- 文字横向滚动的实现
- 图像平滑滚动效果的VC实现
- 实现 IStateManager 接口的服务器控件在设定属性时的注意点
- 动态的改变IFrame的高度,使其没有滚动条,实现IFrame自动伸展
- 滚动新闻控件的ASP.NET与C#实现
- 实现游戏开发中的屏幕滚动功能
- 实现 IStateManager 接口的服务器控件在设定属性时的注意点
- JS实现“鼠标控制局部文字滚动效果”研究
- JavaScript一点也不简单—实现“鼠标控制局部文字滚动效果”初探
- 在Director中实现文本滚动
- [转]图像平滑滚动效果的VC实现
- 图像平滑滚动效果的VC实现
- 利用html中的div标签实现网页中某一块区域的自动滚动
- 使用双缓冲区实现的一个小球碰壁Applet
- VB实现SQL Enterprise Manager功能
- [原创][利用TDC实现表格的排序,过滤,上下条滚动及表格分页]
- [总结]DataGrid 固定表头实现(纵向和横向滚动条滚动,而Header不动)
- Html实现滚动字幕效果