使用传感器实现仿微信摇一摇
来源:互联网 发布:天刀阿暖捏脸数据 编辑:程序博客网 时间:2024/06/06 05:17
模仿微信摇一摇.使用传感器轻松实现摇一摇效果.
这里使用加速度传感器,分别在设备的x,y,z三维空间坐标取定值(摇的范围不要太大)
public class MainActivity extends AppCompatActivity implements SensorEventListener { private TextView sensor; private SensorManager sensorManager; private ImageView up_logo, down_logo; //控制音乐 private SoundPool soundPool; private int soundPool_id; //震动 private Vibrator vibrator; // private @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sensor = (TextView) findViewById(R.id.text_sensor); //SensorManager 管理着当前设备上的所有传感器 是基于系统服务的 sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); //获取当前设备的所有传感器 List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL); StringBuilder builder = new StringBuilder(); builder.append("传感器总数" + sensorList.size() + "\n"); for (int i = 0; i < sensorList.size(); i++) { Sensor sensor = sensorList.get(i); builder.append("传感器名称:" + sensor.getName() + "\n" + "传感器厂商:" + sensor.getVendor() + "\n"); } sensor.setText(builder); //////////////////////////////////////////////////////////////////// initView(); //音乐 initSoundPool(); //震动 initVibrator(); } @Override protected void onStart() { super.onStart(); //设置传感器的监听,加速传感器 initSensor(); }这里写图片描述 private void initSensor() { Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); //通过SensorManager来实现监听加速传感器 sensorManager.registerListener(this, accelerometerSensor, SensorManager.SENSOR_DELAY_UI); } private void initVibrator() { vibrator = (Vibrator) this.getSystemService(VIBRATOR_SERVICE); } private void initSoundPool() { //参数三没有意义.相当于保留字段 if (Build.VERSION.SDK_INT >= 21) { SoundPool.Builder builder = new SoundPool.Builder(); //设置 builder.setMaxStreams(1);//音乐的个数 AudioAttributes attributs = new AudioAttributes.Builder() .setLegacyStreamType(AudioManager.STREAM_MUSIC) .build(); builder.setAudioAttributes(attributs); soundPool = builder.build(); } else { soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0); } //添加音乐 //参数三是音乐池中音乐播放的优先级 soundPool_id = soundPool.load(this, R.raw.awe, 1); } private void initView() { up_logo = (ImageView) findViewById(R.id.image1); down_logo = (ImageView) findViewById(R.id.image2); } //数据发生变化 @Override public void onSensorChanged(SensorEvent event) { Sensor sensor = event.sensor; int type = sensor.getType(); switch (type) { case Sensor.TYPE_ACCELEROMETER://加速传感器 float[] values = event.values; float x = values[0]; float y = values[1]; float z = values[2]; if (Math.abs(x) > 30 || Math.abs(y) > 30 || Math.abs(z) > 30) { //触发摇一摇 //音乐播放 /** * @param soundID a soundID returned by the load() function * @param leftVolume left volume value (range = 0.0 to 1.0)//左声道 * @param rightVolume right volume value (range = 0.0 to 1.0)//右声道 * @param priority stream priority (0 = lowest priority) * @param loop loop mode (0 = no loop, -1 = loop forever) * @param rate playback rate (1.0 = normal playback, range 0.5 to 2.0) * @return non-zero streamID if successful, zero if failed * */ soundPool.play(soundPool_id, 1, 1, 0, 0, 1); //震动 vibrator.vibrate(new long[]{200, 300, 400, 200}, -1); //执行动画 initAnimation(); } break; default: break; } } private void initAnimation() { // 来个动画集合 AnimationSet set_up = new AnimationSet(true); TranslateAnimation up_up = new TranslateAnimation( TranslateAnimation.RELATIVE_TO_SELF, 0,//x轴起点 TranslateAnimation.RELATIVE_TO_SELF, 0,//x轴终点 TranslateAnimation.RELATIVE_TO_SELF, 0,//y轴起点 TranslateAnimation.RELATIVE_TO_SELF, -1//y轴终点 ); up_up.setDuration(1000); TranslateAnimation up_down = new TranslateAnimation( TranslateAnimation.RELATIVE_TO_SELF, 0,//x轴起点 TranslateAnimation.RELATIVE_TO_SELF, 0,//x轴终点 TranslateAnimation.RELATIVE_TO_SELF, -1,//y轴起点 TranslateAnimation.RELATIVE_TO_SELF, 0//y轴终点 ); up_down.setDuration(1000); //延迟执行set中的某一个动画 up_down.setStartOffset(500); set_up.addAnimation(up_up);//移动上去 set_up.addAnimation(up_down);//拉下来 up_logo.startAnimation(set_up); //////////////////////////////////////////////////// AnimationSet set_down = new AnimationSet(true); TranslateAnimation down_down = new TranslateAnimation( TranslateAnimation.RELATIVE_TO_SELF, 0,//x轴起点 TranslateAnimation.RELATIVE_TO_SELF, 0,//x轴终点 TranslateAnimation.RELATIVE_TO_SELF, 0,//y轴起点 TranslateAnimation.RELATIVE_TO_SELF, 1//y轴终点 ); down_down.setDuration(1000); TranslateAnimation down_up = new TranslateAnimation( TranslateAnimation.RELATIVE_TO_SELF, 0,//x轴起点 TranslateAnimation.RELATIVE_TO_SELF, 0,//x轴终点 TranslateAnimation.RELATIVE_TO_SELF, 1,//y轴起点 TranslateAnimation.RELATIVE_TO_SELF, 0//y轴终点 ); down_up.setDuration(1000); set_down.addAnimation(down_down);//向下移动 set_down.addAnimation(down_up);//往上拉动 down_logo.startAnimation(set_down); } //精度发生变化,传感器,该方法用不到 @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override protected void onStop() { super.onStop(); sensorManager.unregisterListener(this); } @Override protected void onDestroy() { super.onDestroy(); //解除注册 sensorManager.unregisterListener(this); }}
0 0
- 使用传感器实现仿微信摇一摇
- 方向传感器---使用加速度传感器和地磁传感器共同实现
- 传感器实现仿微信摇一摇功能
- Android利用传感器实现-仿微信摇一摇
- 使用传感器
- 传感器的使用:光线传感器
- 传感器的使用:加速度传感器
- 传感器的使用:方向传感器
- Iwfu-安卓传感器(2)使用传感器实现几个小例子
- Android仿微信摇一摇,加速度传感器基本使用
- android 传感器使用 Compass指南针的实现功能
- Android 使用加速度传感器实现摇一摇功能及优化
- Android加速度传感器的使用:摇一摇功能的实现
- Android加速度传感器的使用:摇一摇功能的实现
- android 水准仪的实现(方向传感器的使用)
- android 水准仪的实现(方向传感器的使用)
- android 传感器的实现
- android传感器功能实现
- 实现二叉排序树
- 彻底弄懂prepack与webpack的关系
- 动态库和静态库的区别
- 第八章 PX4-Pixhawk-SDlog解析
- 事务的编写
- 使用传感器实现仿微信摇一摇
- [XDU 1203]Happy to Eliminate:状压DP
- (ssl1010)P1004 2000年分区联赛提高组之四 方格取数
- 威佐夫博弈
- android的安装
- CCF NOI1074 2的幂次方表示
- linux获取U盘可用空间大小,U盘大小——statfs的使用
- poj3495 Bitwise XOR of Arithmetic Progression
- 一个activity两个fragment的通信