Android .传感器仿微信摇一摇

布局文件:

<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);
    }
}

效果如下: 

猜你喜欢

转载自blog.csdn.net/LoverLeslie/article/details/82893810