浏览 10091 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (10) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-15
今日上课,学习了怎么利用传感器做应用···
package com.ashtray; import android.app.Activity; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.util.Log; public class main extends Activity { //传感器管理对象 SensorManager manager; //传感器对象 Sensor sensor; //界面 OrenView view; //新建一个传感器事件监听器,重写其方法,主要是重写 onSensorChanged SensorEventListener listener = new SensorEventListener(){ public void onSensorChanged(SensorEvent event) { //这个浮点数详细说明一下,是一个长度为三的浮点型数组,每一个元素在不同的传感器都有不同的含义。此处因为使用的是方向传感器,所以只关注第一个浮点数,即角度。而且这个角度是以相对于北方度数的一个角度(北方为0,顺时针转动,东方为90,南方为180,西方为270) float orentation = event.values[0]; Log.i("####",""+orentation); //将这个值传向页面 view.setDegree(orentation); } public void onAccuracyChanged(Sensor sensor, int accuracy) {} }; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //产生页面对象 view = new OrenView(this); setContentView(view); //得到传感器管理对象 manager = (SensorManager)this.getSystemService(Context.SENSOR_SERVICE); //得到传感器对象,Sensor.TYPE_ORIENTATION是个静态int常量,表示不同的传感器 sensor = manager.getDefaultSensor(Sensor.TYPE_ORIENTATION); //注册传感器,返回一个布尔值,用来判断是否注册成功,确定下一步操作 //第三个参数表示传感器的灵敏度或者说刷新率 //boolean reg = manager.registerListener(listener, sensor,SensorManager.SENSOR_DELAY_NORMAL); } //注意重写这个方法,在这个方法中要执行传感器的注销 //否则当退出应用时传感器已然运作 public void onStop(){ super.onStop(); manager.unregisterListener(listener, sensor); } }
再看View界面中的代码··· 我用的是SurfaceView,绘制的细节我就不赘述了··· 不清楚的朋友我们再探讨··· package com.ashtray; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.view.SurfaceHolder; import android.view.SurfaceView; public class OrenView extends SurfaceView implements SurfaceHolder.Callback{ SurfaceHolder holder; Paint paint; Bitmap bit; Bitmap background; //本类的一个属性,角度,接收自传感器 public float degree; public OrenView(Context context) { super(context); this.setKeepScreenOn(true); paint = new Paint(); bit = BitmapFactory.decodeResource(context.getResources(),R.drawable.pin); background = BitmapFactory.decodeResource(context.getResources(),R.drawable.news); background = Bitmap.createScaledBitmap(background, 320, 450,false); holder = this.getHolder(); holder.addCallback(this); } public float getDegree() { return degree; } public void setDegree(float degree) { this.degree = degree; } //启动一个自定义的线程 public void surfaceCreated(SurfaceHolder holder) { Thread t = new MyThread(); t.start(); } class MyThread extends Thread{ public void run() { while(true){ Canvas c = holder.lockCanvas(); if(c != null){ c.save(); c.drawBitmap(background, 0, 0, paint); // try { // sleep(500); // } catch (InterruptedException e) { // e.printStackTrace(); // } //手机转动多少度,就绘制负的多少度,保持绘制的指针指向0度,即指向北方 c.rotate(-1*degree,148,216); c.drawBitmap(bit, 148, 40, paint); c.restore(); holder.unlockCanvasAndPost(c); } } } } public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {} public void surfaceDestroyed(SurfaceHolder holder) {} }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-08-15
第一次发帖···
格式掌握的不好··· 请海涵··· 这个应用还是挺好玩的··· 不过遗憾的是模拟器测试不出效果··· 我也是借老师手机测试的··· |
|
返回顶楼 | |
发表时间:2010-08-17
上课?想问几个问题:
1. 老师水平怎么样? 2. 你们的学费多少? 3. 你工作多久了? 谢谢。 |
|
返回顶楼 | |
发表时间:2010-08-18
1,老师是业内,开发水平不错···
2,因为某些原因,学费不贵,原因就不细说了··· 3,还没工作,正在学习··· |
|
返回顶楼 | |
发表时间:2010-08-30
国内android有搞头么?
|
|
返回顶楼 | |
发表时间:2011-06-01
还真挺有搞头
|
|
返回顶楼 | |