布局文件:
<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);
}
}
效果如下: