直接看代码
1:配置文件activity_main.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:background="#111"    android:orientation="vertical" >    <ImageView        android:id="@+id/shakeBg"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerInParent="true"        android:contentDescription="@null"        android:src="@drawable/shakehideimg_man" />    <LinearLayout        android:id="@+id/shake_content"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_centerInParent="true"        android:gravity="center"        android:orientation="vertical" >        <RelativeLayout            android:id="@+id/shakeImgUp"            android:layout_width="fill_parent"            android:layout_height="140dip"            android:background="#111"            android:visibility="visible" >            <ImageView                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_alignParentBottom="true"                android:layout_centerHorizontal="true"                android:contentDescription="@null"                android:src="@drawable/shake_logo_up" />        </RelativeLayout>        <RelativeLayout            android:id="@+id/shakeImgDown"            android:layout_width="fill_parent"            android:layout_height="140dip"            android:background="#111"            android:visibility="visible" >            <ImageView                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_centerHorizontal="true"                android:contentDescription="@null"                android:src="@drawable/shake_logo_down" />        </RelativeLayout>    </LinearLayout>  </RelativeLayout>


java代码
package com.yancheng.shack;import java.io.IOException;import java.util.HashMap;import android.app.Activity;import android.media.AudioManager;import android.media.SoundPool;import android.os.Bundle;import android.os.Vibrator;import android.view.animation.Animation;import android.view.animation.Animation.AnimationListener;import android.view.animation.AnimationSet;import android.view.animation.TranslateAnimation;import android.widget.RelativeLayout;import android.widget.Toast;import com.yancheng.shack.ShakeListener.OnShakeListener;public class MainActivity extends Activity {private final int DURATION_TIME = 600;private ShakeListener mShakeListener = null;private Vibrator mVibrator;private RelativeLayout mImgUp;private RelativeLayout mImgDn;private SoundPool sndPool;private HashMap<Integer, Integer> soundPoolMap = new HashMap<Integer, Integer>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();mVibrator = (Vibrator) getApplication().getSystemService(VIBRATOR_SERVICE);// 检查设备是否有震动装置// mVibrator.hasVibrator();loadSound();mShakeListener = new ShakeListener(this);// 监听到手机摇动mShakeListener.setOnShakeListener(new OnShakeListener() {public void onShake() {startAnim();}});}/**** * 初始化控件 */private void initView() {// TODO Auto-generated method stubmImgUp = (RelativeLayout) findViewById(R.id.shakeImgUp);mImgDn = (RelativeLayout) findViewById(R.id.shakeImgDown);}/**** * 获取音效 */private void loadSound() {sndPool = new SoundPool(2, AudioManager.STREAM_SYSTEM, 5);new Thread() {public void run() {try {soundPoolMap.put(0,sndPool.load(getAssets().openFd("sound/shake_sound_male.mp3"), 1));soundPoolMap.put(1, sndPool.load(getAssets().openFd("sound/shake_match.mp3"), 1));} catch (IOException e) {e.printStackTrace();}}}.start();}/**** * 开启动画 */public void startAnim() {AnimationSet animup = new AnimationSet(true);TranslateAnimation mytranslateanimup0 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f,Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,-0.5f);mytranslateanimup0.setDuration(DURATION_TIME);TranslateAnimation mytranslateanimup1 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f,Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,+0.5f);mytranslateanimup1.setDuration(DURATION_TIME);mytranslateanimup1.setStartOffset(DURATION_TIME);animup.addAnimation(mytranslateanimup0);animup.addAnimation(mytranslateanimup1);mImgUp.startAnimation(animup);AnimationSet animdn = new AnimationSet(true);TranslateAnimation mytranslateanimdn0 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f,Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,+0.5f);mytranslateanimdn0.setDuration(DURATION_TIME);TranslateAnimation mytranslateanimdn1 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f,Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,-0.5f);mytranslateanimdn1.setDuration(DURATION_TIME);mytranslateanimdn1.setStartOffset(DURATION_TIME);animdn.addAnimation(mytranslateanimdn0);animdn.addAnimation(mytranslateanimdn1);mImgDn.startAnimation(animdn);// 动画监听,开始时显示加载状态,mytranslateanimdn0.setAnimationListener(new AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {mShakeListener.stop();sndPool.play(soundPoolMap.get(0), (float) 0.2, (float) 0.2, 0,0, (float) 0.6);}@Overridepublic void onAnimationRepeat(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {Toast.makeText(getBaseContext(), "摇一摇结束", Toast.LENGTH_SHORT).show();mShakeListener.start();}});}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();if (mShakeListener != null) {mShakeListener.stop();}}}





重写摇一摇监听事件:
package com.yancheng.shack;import android.content.Context;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;/** * 摇一摇监听事件 * @created 2014-08-19 * @author  * */public class ShakeListener implements SensorEventListener {private static final int SPEED_SHRESHOLD = 4500;//这个值越大需要越大的力气来摇晃手机private static final int UPTATE_INTERVAL_TIME = 50;private SensorManager sensorManager;private Sensor sensor;private OnShakeListener onShakeListener;private Context mContext;private float lastX;private float lastY;private float lastZ;private long lastUpdateTime;public ShakeListener(Context c) {mContext = c;start();}public void start() {sensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);if (sensorManager != null) {sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);}if (sensor != null) {sensorManager.registerListener(this, sensor,SensorManager.SENSOR_DELAY_GAME);}}public void stop() {sensorManager.unregisterListener(this);}public void setOnShakeListener(OnShakeListener listener) {onShakeListener = listener;}public void onSensorChanged(SensorEvent event) {long currentUpdateTime = System.currentTimeMillis();long timeInterval = currentUpdateTime - lastUpdateTime;if (timeInterval < UPTATE_INTERVAL_TIME)return;lastUpdateTime = 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) {onShakeListener.onShake();}}public void onAccuracyChanged(Sensor sensor, int accuracy) {}public interface OnShakeListener {public void onShake();}}

最后资源文件在附件代码中会给出。效果图

更多相关文章

  1. Android(安卓)向系统日历中添加提醒(踩坑)
  2. android studio 57 MP3 音乐播放器 下载网络歌曲 代码
  3. android 自编音乐播放器源代码
  4. android位置服务
  5. android视频播放的代码
  6. android位置服务
  7. Android开机自动启动程序设置
  8. android 手势操作GestureDetector
  9. Android体验系列之--AnalogClock控件

随机推荐

  1. 跟我自学linux第二天笔试题
  2. MongoDB实战篇(七):使用索引
  3. 教你如何在快应用中跳转到Android的app
  4. 黑盒测试只会点点点 这些你都需要知道
  5. DolphinDB丨金融高频因子流批一体计算神
  6. 阿里高并发Netty开源框架,撸完人已猝!!!
  7. 深度学习-3D点云实战系列
  8. K8S部署API网关Kong
  9. 预测UI设计师未来发展方向
  10. 跟我自学linux第一天面试作业题