搖一搖功能是使用手機(jī)加速度傳感器來(lái)判斷是否處于搖一搖狀態(tài),從而進(jìn)行相應(yīng)的操作。
創(chuàng)新互聯(lián)建站基于成都重慶香港及美國(guó)等地區(qū)分布式IDC機(jī)房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動(dòng)大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)服務(wù)器托管報(bào)價(jià),主機(jī)托管價(jià)格性價(jià)比高,為金融證券行業(yè)四川綿陽(yáng)服務(wù)器托管,ai人工智能服務(wù)器托管提供bgp線路100M獨(dú)享,G口帶寬及機(jī)柜租用的專業(yè)成都idc公司。
1、將音樂(lè)文件放在res/raw下,如果沒(méi)有raw,創(chuàng)建一個(gè)
2、布局文件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_shake" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.sq.dissertation.activity.ShakeActivity" android:background="#1d1d1d"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@mipmap/shakehideimg_man2"/> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> <ImageView android:id="@+id/hand_up" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/shake_logo_up"/> <ImageView android:id="@+id/hand_down" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/shake_logo_down"/> </LinearLayout> </RelativeLayout>
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)); //實(shí)例化手機(jī)震動(dòng)的對(duì)象 vibrator = ((Vibrator) getSystemService(VIBRATOR_SERVICE)); //獲取加速度傳感器 sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); /*實(shí)例化對(duì)象,參數(shù):同時(shí)播放的流的最大數(shù)量,即同時(shí)播放的音樂(lè)數(shù)的上限; 流的類型,一般都是使用AudioManager.STREAM_MUSIC表示可以重復(fù)播放 采樣率轉(zhuǎn)化質(zhì)量,但是現(xiàn)在該功能還不能生效,建議用0 */ // soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0); //參數(shù)三沒(méi)有效果,建議用1 // loadId = soundPool.load(ShakeActivity.this, R.raw.three, 1); player = MediaPlayer.create(this, R.raw.music); initAnimation(); } private void initAnimation() { //上下兩張圖片的動(dòng)畫(huà) 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) { //注冊(cè)監(jiān)聽(tīng)器,監(jiān)聽(tīng),傳感器,獲取傳感器的頻率 sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL); } } @Override protected void onPause() { super.onPause(); if (sensorManager != null) { //取消監(jiān)聽(tīng)器 sensorManager.unregisterListener(this); //釋放音頻資源 // soundPool.unload(loadId); } } @Override protected void onDestroy() { super.onDestroy(); player.release(); } @Override public void onSensorChanged(SensorEvent event) { //獲取傳感器信息改變時(shí)的數(shù)據(jù) float[] values = event.values; //x軸方向的重力加速度,向右為正 float x = values[0]; //y軸方向的重力加速度,向左為正 float y = values[1]; //z軸方向的重力加速度,向上為正 float z = values[2]; //一般在這三個(gè)方向的重力加速度達(dá)到40就達(dá)到了搖晃手機(jī)的狀態(tài) 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:音頻的優(yōu)先級(jí),值越大優(yōu)先級(jí)越高, 0:循環(huán)播放的次數(shù),0為播放一次,-1為無(wú)限循環(huán),其他值為loop+1次數(shù) 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) { } }
補(bǔ)充:Java代碼中出現(xiàn)的SoundPool來(lái)播放音效,它適合播放短促的音效,它最多只能申請(qǐng)1M的內(nèi)存空間,有些文件本身不大,但是解碼后會(huì)很大,所以一般不播放歌曲類的文件。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
當(dāng)前題目:java仿微信搖一搖實(shí)現(xiàn)播放音樂(lè)
分享網(wǎng)址:http://aaarwkj.com/article16/gihegg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、品牌網(wǎng)站制作、關(guān)鍵詞優(yōu)化、微信公眾號(hào)、網(wǎng)站設(shè)計(jì)、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)