摇一摇听歌的小Demo

摇一摇听歌
public class MainActivity extends AppCompatActivity {
private TextView mTvHb ;
private ObjectAnimator mObjectAnimator ;
private boolean isHasYD ;
SensorManagerHelper sensorHelper ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
mTvHb = (TextView) findViewById(R.id. tv_hb );
sensorHelper = new SensorManagerHelper( this );
sensorHelper .setOnShakeListener( new SensorManagerHelper.OnShakeListener() {

@Override
public void onShake() {
// System.out.println("shake");
// Toast.makeText(MainActivity.this, " 摇一摇震动 ", Toast.LENGTH_SHORT).show();

if (! isHasYD ){
mTvHb .setText( " 摇一摇听歌 " );
mObjectAnimator = ObjectAnimator. ofFloat ( mTvHb , "rotation" , 0 ,- 80 , 80 );
mObjectAnimator .setDuration( 500 );
mObjectAnimator .setRepeatMode(ObjectAnimator. REVERSE );
mObjectAnimator .setRepeatCount( 3 );
mObjectAnimator .start();
isHasYD = true ;
}
}
});


}

@Override
protected void onDestroy() {
super .onDestroy();
sensorHelper .stop();
}


}

public class SensorManagerHelper implements SensorEventListener {
/** 速度阈值,当摇晃速度达到这值后产生作用 */
private static final int SPEED_SHRESHOLD = 3000 ;
/** 两次检测的时间间隔 */
private static final int UPTATE_INTERVAL_TIME = 50 ;
private SensorManager mSensorManager ;
private NotificationManager mManager ;
private Sensor mSensor ;
private Vibrator mVibrator ;
private OnShakeListener mOnShakeListener ;
private Context mContext ;
private long mLastUpdateTime ;
private float lastX ;
private float lastY ;
private float lastZ ;

public SensorManagerHelper(Context context) {
this . mContext = context;
start();
}

public void start() {
mSensorManager = (SensorManager) mContext
.getSystemService(Context. SENSOR_SERVICE );
mManager = (NotificationManager) mContext .getSystemService(Service. NOTIFICATION_SERVICE );

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

if ( mSensorManager != null ) {
mSensor = mSensorManager
.getDefaultSensor(Sensor. TYPE_ACCELEROMETER );
}
if ( mSensor != null ) {
mSensorManager .registerListener( this , mSensor ,
SensorManager. SENSOR_DELAY_GAME );
}
}

public void stop() {
mSensorManager .unregisterListener( this );
}

public interface OnShakeListener {
public void onShake();
}

public void setOnShakeListener(OnShakeListener listener) {
mOnShakeListener = listener;
}

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

/***
* 重力感应器感应获得变化数据
*/
@Override
public void onSensorChanged(SensorEvent event) {
long currentUpdateTime = System. currentTimeMillis ();
long timeInterval = currentUpdateTime - mLastUpdateTime ;
if (timeInterval < UPTATE_INTERVAL_TIME )
return ;
mLastUpdateTime = currentUpdateTime;
float x = event. values [ 0 ];
float y = event. values [ 1 ];
float z = event. values [ 2 ];
float deltaX = x - lastX ;
float deltaY = y - lastY ;
float deltaZ = z - lastZ ;
lastX = x;
lastY = y;
lastZ = z;
double speed = Math. sqrt (deltaX * deltaX + deltaY * deltaY + deltaZ
* deltaZ)
/ timeInterval * 10000 ;
if (speed >= SPEED_SHRESHOLD ) {
// long[] l={200,500,200,500};
// mVibrator.vibrate(l,-1);

Notification.Builder builder = new Notification.Builder( mContext );
String uriString = Environment. getExternalStorageDirectory ().toString() + "/why.mp3" ;
builder.setSound(Uri. parse (uriString.toString()));
Notification noti = builder.getNotification();
//17 以后推出的
//Notification noti = builder.build();
mManager .notify( 1 , noti);
mOnShakeListener .onShake();
}
}
}
xml布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
    >
    <TextView
        android:id="@+id/tv_hb"
        android:layout_width="100dp"
        android:layout_height="200dp"
        android:layout_centerInParent="true"
        android:background="#f00"
        android:gravity="center"
        android:text="我是红包呦!"
        android:textColor="#ff0"
        android:textStyle="bold"/>

</RelativeLayout>
 
 
在manifests注册:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值