Android .感測器仿微信搖一搖
阿新 • • 發佈:2018-11-14
佈局檔案:
<LinearLayout android:background="@drawable/shakehideimg_man2" android:layout_gravity="center" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/up" android:layout_width="match_parent" android:layout_height="300dp" android:background="@drawable/shake_logo_up"/> <ImageView android:id="@+id/down" android:layout_width="match_parent" android:layout_height="300dp" android:background="@drawable/shake_logo_down"/> </LinearLayout>
如圖:
核心程式碼:
1.建立服務(感測器+震動)
2.設定音樂池
3.如果搖動手機,則進行判斷實現動畫,translayout+震動+音樂播放操作
public class sendFeelThing_three extends Fragment { @BindView(R.id.up) ImageView up; @BindView(R.id.down) ImageView down; Unbinder unbinder; SoundPool mSoundPool; int load; SensorManager sensorManager; SensorEventListener sensorEventListener; Vibrator vibrator; @SuppressLint("ServiceCast") @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.sendfeelthings_3, null); unbinder = ButterKnife.bind(this, view); //音樂池: mSoundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0); load = mSoundPool.load(getActivity(), R.raw.awe, 1); /** * 感測器: * 1.獲取服務: * 2.獲取裝置所有的感測器的型別: * 3.1、獲取到加速度感測器 */ sensorManager= (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE); vibrator= (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE); //獲取震動伺服器: //初始化SoundPool /** * 感測器監聽器: */ sensorEventListener=new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { float[] values = event.values; float xValues = Math.abs(values[0]); float yValues = Math.abs(values[1]); float zValues = Math.abs(values[2]); //表示加速度: if (xValues > 15 || yValues > 15 || zValues > 15) { //新增震動 long[] pattern = {300,500}; vibrator.vibrate(pattern,-1); mSoundPool.play(load,1.0f,1.0f,1,0,1.0f); getAnimation(); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; return view; } @Override public void onResume() { super.onResume(); Sensor defaultSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); sensorManager.registerListener(sensorEventListener,defaultSensor,SensorManager.SENSOR_DELAY_GAME); } //登出SensorManger: @Override public void onPause() { super.onPause(); sensorManager.unregisterListener(sensorEventListener); } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); } public void getAnimation(){ //動畫: Animation animation = AnimationUtils.loadAnimation(getActivity(), R.anim.up); animation.setFillBefore(true); up.startAnimation(animation); Animation animation1 = AnimationUtils.loadAnimation(getActivity(), R.anim.down); animation.setFillBefore(true); down.startAnimation(animation1); } }
效果如下: