android 摇一摇+震动+声音效果

作者: 程序猿tx | 来源:发表于2018-09-23 13:19 被阅读39次

文章链接:https://mp.weixin.qq.com/s/n6EXvfmpNPtWM1kEnGgwUA

摇一摇红包效果已经是老生常谈的了,利用手机的传感器识别摇一摇,同时过程中进行动画+震动+声音的效果。Ps:百度网页版「摇一摇」三个字,会有效果的,皮一哈!
效果图:

image

摇一摇主要通过SensorManager监听手机,实现 SensorEventListener,在onSensorChanged去判断,根据加速度来判断摇晃的程度。

ShakeSensorListener shakeListener = new ShakeSensorListener();
SensorManager sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        
private class ShakeSensorListener implements SensorEventListener {

    @Override
    public void onSensorChanged(SensorEvent event) {
         //避免一直摇
        if (isShake) {
            return;
        }
         // 开始动画
        anim.start();
        float[] values = event.values;
        /*
         * x : x轴方向的重力加速度,向右为正
         * y : y轴方向的重力加速度,向前为正
         * z : z轴方向的重力加速度,向上为正
         */
        float x = Math.abs(values[0]);
        float y = Math.abs(values[1]);
        float z = Math.abs(values[2]);
        //加速度超过19,摇一摇成功
        if (x > 19 || y > 19 || z > 19) {
            isShake = true;
            //播放声音
            playSound(MainActivity.this);
            //震动,注意权限
            vibrate( 500);
            //仿网络延迟操作,这里可以去请求服务器...
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    //弹框
                    showDialog();
                    //动画取消
                    anim.cancel();
                }
            },1000);
        }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }
}

如果手机一直在摇晃,会不停的调用onSensorChanged ,而我们只想要一次摇一摇的效果,所以加了isShake 字段去判断。 在一次摇一摇事件完成后置false,可以继续摇一摇。

注册监听,同时别忘了取消注册。

@Override
protected void onResume() {
    //注册监听加速度传感器
    sensorManager.registerListener(shakeListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            SensorManager.SENSOR_DELAY_FASTEST);
    super.onResume();
}

@Override
protected void onPause() {
    //取消注册
    sensorManager.unregisterListener(shakeListener);
    super.onPause();
}

摇一摇过程可以执行动画效果。

ObjectAnimator anim = ObjectAnimator.ofFloat(imgHand,"rotation",0f,45f,-30f,0f);
anim.setDuration(500);
anim.setRepeatCount(ValueAnimator.INFINITE);

播放声音,这里放在raw 资源文件里的。

private void playSound(Context context) {
    MediaPlayer player = MediaPlayer.create(context,R.raw.shake_sound);
    player.start();
}

震动效果,这里注意要在AndroidManifest 文件里添加权限 <uses-permission android:name="android.permission.VIBRATE" />

private void vibrate(long milliseconds) {
    Vibrator vibrator = (Vibrator)getSystemService(Service.VIBRATOR_SERVICE);
    vibrator.vibrate(milliseconds);
}

一次摇一摇后,这里在弹框消失后可继续摇一摇。

private void showDialog() {
    final AlertDialog mAlertDialog = new AlertDialog.Builder(this).show();
    View view = LayoutInflater.from(this).inflate(R.layout.layout_dialog,null);
    mAlertDialog.setContentView(view);
    mAlertDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
        @Override
        public void onCancel(DialogInterface dialog) {
            //这里让弹框取消后,才可以执行下一次的摇一摇
            isShake = false;
            mAlertDialog.cancel();
        }
    });
    Window window = mAlertDialog.getWindow();
    window.setBackgroundDrawable(new ColorDrawable(0x00000000));
}

至此,一套摇一摇效果完成!

github地址:https://github.com/taixiang/shake

欢迎关注我的个人博客:https://www.manjiexiang.cn/

更多精彩欢迎关注微信号:春风十里不如认识你
一起学习,一起进步,欢迎上车,有问题随时联系,一起解决!!!

image

相关文章

  • android 摇一摇+震动+声音效果

    文章链接:https://mp.weixin.qq.com/s/n6EXvfmpNPtWM1kEnGgwUA 摇一...

  • 2018-12-18

    摇一摇红包效果已经是老生常谈的了,利用手机的传感器识别摇一摇,同时过程中进行动画+震动+声音的效果。Ps:百度网页...

  • 微信摇一摇声音+震动---iOS版

    直接上代码,注释应该蛮详细的了: demo地址

  • Android监听摇一摇

    Android摇一摇的监听

  • iOS编程 摇一摇 震动

    #import"ViewController.h" #import @interfaceViewControlle...

  • 摇一摇根据城市位置推荐酒店

    摇一摇根据城市位置推荐酒店客户端### 1、实现摇一摇并震动需要导入头文件。#import 2、当前城市定位,可以...

  • Android摇一摇功能

    利用加速度传感器,并注册监听器 通过回调中的x、y、z的值,做摇一摇动作的判定 结合自己的条件:如每2秒允许触发一...

  • 摇一摇撒金币效果

    公司要做个活动,然后要做撒金币效果,网上找了好多资料效果不是很好,这个是网上找的一个比较满意的效果把代码分享出来,...

  • iOS 摇一摇+动画效果

    项目要做一个摇一摇抽奖的需求,于是就提前做了个简化的Demo,遇到的坑啊什么的,当然是记录下来啦~~摇一摇抽奖的大...

  • 关于ios端,摇一摇页面音频无法播放

    最近在做微信网站,做到一个摇一摇页面时,安卓出现声音,但是在ios端没声音???查到说ios不把摇一摇为交互动作,...

网友评论

本文标题:android 摇一摇+震动+声音效果

本文链接:https://www.haomeiwen.com/subject/izofoftx.html