Android 如何实现微信摇一摇(加速度传感器)

使用加速度传感器判断手机是否在摇晃

展示代码:

MainActivity:

​
package com.example.day09yaoyiyao;

import android.annotation.SuppressLint;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.IOException;

public class MainActivity extends AppCompatActivity implements SensorEventListener {

    private SensorManager sensorManager;
    private ImageView image_id;
    private ImageView image_up;
    private ImageView image_down;
    private SoundPool soundPool;
    private int mLoadId;

    @SuppressLint("ServiceCast")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();

        soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
        mLoadId = soundPool.load(getActivity(),R.raw.awe,1);

        //加速度传感器
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);

    }

    @Override
    public void onSensorChanged(SensorEvent event) {

        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
            float x = event.values[0];//x轴的加速度
            float y = event.values[1];//y轴的加速度
            float z = event.values[2];//z轴的加速度

            //静止状态下加速度为9.8,当加速度>15的时候就表示在摇晃手机
            if (x > 15 || y > 15 || z > 15) {

                Toast.makeText(this, "你正在摇一摇", Toast.LENGTH_SHORT).show();

                //播放音乐
                //声音id, 左声道(0.0f -- 1.0f) , 右声道, 优先级, 是否循环(0 不循环, 1 循环) , 播放比例( 正常播放 1)
                soundPool.play(mLoadId,1.0f,1.0f,1,0,1.0f);



                //设置动画的效果
                Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_up);
                image_up.startAnimation(animation);
                Animation animation1 = AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_down);
                image_down.startAnimation(animation1);
            }

        }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }

    private void initView() {
        image_id = (ImageView) findViewById(R.id.image_id);
        image_up = (ImageView) findViewById(R.id.image_up);
        image_down = (ImageView) findViewById(R.id.image_down);
    }
}

​

布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/image_id"
        android:background="@drawable/shakehideimg_man2"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <ImageView
            android:id="@+id/image_up"
            android:layout_weight="1"
            android:src="@drawable/shake_logo_up"
            android:scaleType="centerCrop"
            android:layout_width="match_parent"
            android:layout_height="0dp" />
        <ImageView
            android:id="@+id/image_down"
            android:layout_weight="1"
            android:scaleType="centerCrop"
            android:src="@drawable/shake_logo_down"
            android:layout_width="match_parent"
            android:layout_height="0dp" />
    </LinearLayout>



</FrameLayout>

动画(up):

<?xml version="1.0" encoding="utf-8"?>
<translate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="500"
    android:toYDelta="-300"
    android:toXDelta="0"
    android:fromYDelta="0"
    android:fromXDelta="0" >

</translate>

down:

<?xml version="1.0" encoding="utf-8"?>
<translate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="500"
    android:toYDelta="300"
    android:toXDelta="0"
    android:fromYDelta="0"
    android:fromXDelta="0" >

</translate>

猜你喜欢

转载自blog.csdn.net/LIXIAONA_1101/article/details/82667896