做完之后摇一摇就闪退。

来源:4-4 Android摇一摇-动画实现

慕粉4140763

2016-10-25 15:43

package imooc.shake;

import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.os.Vibrator;
import android.support.v7.app.AppCompatActivity;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.TextView;

public class ShakeActivity extends AppCompatActivity implements ShakeSensor.OnShakeListener {

    private static final int MSG_COUNT_END=0X01;//次数使用结束
    private static final int MSG_COUNT_CONTINUE=0X02;//次数没有使用结束
    private ShakeSensor mShakeSensor;
    private MediaPlayer mPlayer;//音乐效果
    private Vibrator mVibrator;//震动效果
    private ImageView mImgHandle;//视图
    private TextView mTxtCount;
    private static int count=3;//记录次数
    private boolean isStart;//是否是开始记录

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shake);
        mImgHandle= (ImageView) this.findViewById(R.id.img_hand);
        mTxtCount= (TextView) this.findViewById(R.id.txt_show_count);
        mShakeSensor = new ShakeSensor(this);
        //注册回调事件
        mShakeSensor.setOnShakeListener(this);
        mShakeSensor.init();

        mVibrator=(Vibrator)this.getSystemService(Context.VIBRATOR_SERVICE);

        //启动动画
        Animation animation = AnimationUtils.loadAnimation(this,R.anim.main_img_handle);
        mImgHandle.startAnimation(animation);
    }
    Handler mHandler = new Handler(){
        public void handleMessage(android.os.Message msg){

            if(msg.what==MSG_COUNT_END){
                //只有震动效果,没有音效,没有产品效果
                startVibrator();
            }else{
                //震动、音乐效果
                startAudioWithVibrator();
                Intent show = new Intent(ShakeActivity.this,ShowActivity.class);
                startActivity(show);

            }
        };
    };

    @Override
    protected void onResume() {
        super.onResume();
        if(count==0){
            count=0;
        }else {
            if(isStart)
            count--;
        }
        isStart=true;
        mTxtCount.setText("今天您还可以摇"+count+"次");
    }

    @Override
    public void onShake() {
        if(count==0){
            //次数已经使用完成
            mHandler.sendEmptyMessage(MSG_COUNT_END);
        }else {
            //还有次数
            mHandler.sendEmptyMessage(MSG_COUNT_CONTINUE);
        }
        //实现操作
//        Toast t = Toast.makeText(this, "摇一摇成功", Toast.LENGTH_SHORT);
//        t.setGravity(Gravity.CENTER,0,0);
//        t.show();

        //添加跳转时ShowActivity进入的动画
        overridePendingTransition(R.anim.main_set_in,0);
    }
/*
 *  启动音乐以及震动
 */
    public void startAudioWithVibrator() {
        mPlayer=MediaPlayer.create(this,R.raw.faded);
        //播放
        mPlayer.start();

        //震动效果
        long pattern[]={500,300,500,300};//间隔多长时间震动
        mVibrator.vibrate(pattern,-1);

    }
/*
 *  启动震动
 */

    public void startVibrator(){
        //震动效果
        long pattern[]={500,300,500,300};//间隔多长时间震动
        mVibrator.vibrate(pattern,-1);
    }

}

哪位大神帮忙看一下,我这个代码哪里写错了?

写回答 关注

2回答

  • 这不是小明君
    2017-12-02 20:33:25

    虽然你肯定解决了

    <uses-permission android:name="android.permission.VIBRATE"/>

    清单文件中加这句话给权限

  • 慕粉4140763
    2016-10-25 15:44:40

    老师的视频丢失了一段,从视频中找到一些抠上去了,但还是有一些可能没写到?

Android动感系列-摇一摇

Android开发中,快速实现摇一摇+动画特效,已经都玩嗨了

14885 学习 · 17 问题

查看课程

相似问题