java仿微信摇一摇实现播放音乐

网友投稿 329 2023-01-28


java仿微信摇一摇实现播放音乐

摇一摇功能是使用手机加速度传感器来判断是否处于摇一摇状态,从而进行相应的操作。

1、将音乐文件放在res/raw下,如果没有raw,创建一个

2、布局文件

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/activity_shake"

android:layout_width="match_parent"

android:layout_height="match_parent"

WdjehYatools:context="com.sq.dissertation.activity.ShakeActivity"

android:background="#1d1d1d">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:src="@mipmap/shakehideimg_man2"/>

android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="center"

android:orientation="vertical">

android:id="@+id/hand_up"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@mipmap/shake_logo_up"/>

android:id="@+id/hand_down"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@mipmap/shake_logo_down"/>

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/activity_shake"

android:layout_width="match_parent"

android:layout_height="match_parent"

WdjehYatools:context="com.sq.dissertation.activity.ShakeActivity"

android:background="#1d1d1d">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:src="@mipmap/shakehideimg_man2"/>

android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="center"

android:orientation="vertical">

android:id="@+id/hand_up"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@mipmap/shake_logo_up"/>

android:id="@+id/hand_down"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@mipmap/shake_logo_down"/>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:src="@mipmap/shakehideimg_man2"/>

android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="center"

android:orientation="vertical">

android:id="@+id/hand_up"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@mipmap/shake_logo_up"/>

android:id="@+id/hand_down"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@mipmap/shake_logo_down"/>

android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="center"

android:orientation="vertical">

android:id="@+id/hand_up"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@mipmap/shake_logo_up"/>

android:id="@+id/hand_down"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@mipmap/shake_logo_down"/>

android:id="@+id/hand_up"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@mipmap/shake_logo_up"/>

android:id="@+id/hand_down"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@mipmap/shake_logo_down"/>

android:id="@+id/hand_down"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@mipmap/shake_logo_down"/>

3、java代码

public class ShakeActivity extends AppCompatActivity implements SensorEventListener {

private ImageView ivUp;

private ImageView ivDown;

private SensorManager sensorManager;

private Vibrator vibrator;

private Sensor sensor;

private MediaPlayer player;

private ObjectAnimator upAnimator;

private ObjectAnimator downAnimator;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_shake);

ivUp = ((ImageView) findViewById(R.id.hand_up));

ivDown = ((ImageView) findViewById(R.id.hand_down));

//获取传感器管理者

sensorManager = ((SensorManager) getSystemService(SENSOR_SERVICE));

//实例化手机震动的对象

vibrator = ((Vibrator) getSystemService(VIBRATOR_SERVICE));

//获取加速度传感器

sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

/*实例化对象,参数:同时播放的流的最大数量,即同时播放的音乐数的上限;

流的类型,一般都是使用AudioManager.STREAM_MUSIC表示可以重复播放

采样率转化质量,但是现在该功能还不能生效,建议用0

*/

// soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);

//参数三没有效果,建议用1

// loadId = soundPool.load(ShakeActivity.this, R.raw.three, 1);

player = MediaPlayer.create(this, R.raw.music);

initAnimation();

}

private void initAnimation() {

//上下两张图片的动画

upAnimator = ObjectAnimator.ofFloat(ivUp, "translationY", 0, -200, 0);

upAnimator.setInterpolator(new AccelerateDecelerateInterpolator());

upAnimator.setDuration(2000);

downAnimator = ObjectAnimator.ofFloat(ivDown, "translationY", 0, 200, 0);

downAnimator.setInterpolator(new AccelerateDecelerateInterpolator());

downAnimator.setDuration(2000);

}

@Override

protected void onResume() {

super.onResume();

if (sensorManager != null) {

//注册监听器,监听,传感器,获取传感器的频率

sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);

}

}

@Override

protected void onPause() {

super.onPause();

if (sensorManager != null) {

//取消监听器

sensorManager.unregisterListener(this);

//释放音频资源

// soundPool.unload(loadId);

}

}

@Override

protected void onDestroy() {

super.onDestroy();

player.release();

}

@Override

public void onSensorChanged(SensorEvent event) {

//获取传感器信息改变时的数据

float[] values = event.values;

//x轴方向的重力加速度,向右为正

float x = values[0];

//y轴方向的重力加速度,向左为正

float y = values[1];

//z轴方向的重力加速度,向上为正

float z = values[2];

//一般在这三个方向的重力加速度达到40就达到了摇晃手机的状态

int value = 18;

if (Math.abs(x) > value || Math.abs(y) > value || Math.abs(z) > 19) {

long patter[] = {200, 1000};

vibrator.vibrate(patter,1);

upAnimator.start();

downAnimator.start();

/*

1f:左声道音量

1f:右声道音量

1:音频的优先级,值越大优先级越高,

0:循环播放的次数,0为播放一次,-1为无限循环,其他值为loop+1次数

1f:播放速率,范围0.5-2.0(1为正常速率)

*/

// soundPool.play(loadId, 1f, 1f, 1, 0, 1f);

if (player.isPlaying()) {

player.seekTo(0);

}else{

player.start();

}

}

}

@Override

public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

}

补充:Java代码中出现的SoundPool来播放音效,它适合播放短促的音效,它最多只能申请1M的内存空间,有些文件本身不大,但是解码后会很大,所以一般不播放歌曲类的文件。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mybatis中延迟加载Lazy策略的方法
下一篇:使用maven生成可执行的jar包的方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~