쉐이크 기능은 휴대폰 가속 센서를 사용하여 쉐이크 상태인지 여부를 결정하고 해당 작업을 수행하는 것입니다.
1. 음악 파일을 RES/RAW 아래에 넣으십시오. 원시가 없으면 a
2. 레이아웃 파일
<? xml version = "1.0"alcoding = "utf-8"?> <elivelaylayout xmlns : android = "http://schemas.android.com/apk/res/android"xmlns : 도구 = "http://schemas.android.com/tools" Android : layout_width = "match_parent"Android : layout_height = "match_parent"도구 : context = "com.sq.dissertation.ackeactivity.Ackeactivity"android = "#1d1d1d"> <imageView Android : layout_width = "Wrap_Content" Android : layout_centerinparent = "true"android : src = "@mipmap/shakehideimg_man2"/> <linearlayout android : layout_width = "match_parent"android : layout_height = "match_parent"and graity = "center"and hand/henep "> videview"> id id view : id = "id view : id view" 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 : "wrap_content"Android : 안드로이드 : src = "@mipmap/shake_logo_down"/> </linearlayout> </exaperivelayout>
3. Java 코드
공개 클래스 면도율은 appcompatactivity를 구현합니다. 개인 ImageView IVDOW; 개인 Sensormanager Sensormanager; 개인 진동기 진동기; 개인 센서 센서; 개인 미디어 플레이어 플레이어; 개인 대상 니메이터 upanimator; 개인 대상이자 DownAnimator; @override protected void onecreate (Bundle SavedInstancestate) {super.oncreate (savedinstancestate); setContentView (R.Layout.Activity_shake); ivup = ((imageView) findViewById (r.id.hand_up)); ivdown = ((ImageView) findViewById (r.id.hand_down); // get sensormanager = ((sensormanager) getSystemservice (sensor_service)); // 휴대 전화의 객체 진동기를 vibrator = ((Vibrator) getSystemservice (vibrator_service)로 인스턴스화합니다. // 가속도 센서 센서 = SensorManager.getDefaultSensor (sensor.type_accelerometer); /*인스턴스형 객체, 매개 변수 : 동시에 연주 된 최대 스트림 수, 즉 동시에 재생 된 음악의 상한이 동시에 연주됩니다. 스트림 유형은 일반적으로 Audiomanager.stream_music을 사용하여 반복 할 수있는 샘플링 속도 변환 품질을 나타내는 데 사용되지만이 기능은 아직 적용 할 수 없지만 0 *// soundpool = new SoundPool (1, audiomanager.stream_music, 0)을 사용하는 것이 좋습니다. // 매개 변수 3은 영향을 미치지 않으며 1 // loadid = soundpool.load (shakeactivity.this, r.raw.three, 1)를 사용하는 것이 좋습니다. player = mediaplayer.create (this, r.raw.music); 이형화 (); } private void initAnimation () {// 상단 및 하단의 애니메이션 upanimator = Objectanimator.offloat (ivup, "translationy", 0, -200, 0); upanimator.setinterpolator (새로운 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 (이, 센서, 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) {// 센서 정보가 바뀌면 데이터 가져옵니다 [] values = event.values; // x 축 방향의 곡물 가속도, 양의 플로트 x = 값 [0]; // y 축 방향의 중력 가속도는 양의 플로트 y = 값이다 [1]; // z 축 방향의 중력 가속도는 양의 플로트 z = 값이다 [2]; //이 세 방향의 일반적인 중력 가속도는 40에 도달하고 전화 int value = 18을 흔드는 상태에 도달합니다. if (math.abs (x)> value || math.abs (y)> value || math.abs (z)> 19) {long patter [] = {200, 1000}; vibrator.mibrate (Patter, 1); upanimator.start (); downAnimator.start (); / * 1F : 왼쪽 채널 볼륨 1F : 오른쪽 채널 볼륨 1 : 오디오 우선 순위, 값이 높을수록 우선 순위가 높을수록, 0 : 루프 재생 시간 수, 0은 한 번, -1은 무한 루프, 다른 값은 루프+1 배, 1f : 재생 속도, 범위 0.5-2.0 (1) * // 1); if (player.isplaying ()) {player.seekto (0); } else {player.start (); }}} @override public void onaCcuracyChanged (센서 센서, int 정확도) {}}Supplement : Soundpool은 사운드 효과를 재생하기 위해 Java 코드에 나타납니다. 짧은 음향 효과를 연주하는 데 적합합니다. 최대 1m 메모리 공간에만 적용 할 수 있습니다. 일부 파일은 그 자체로 크지 않지만 디코딩 후에는 커질 것이므로 일반적으로 노래 파일과 함께 사용되지 않습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.