這個demo模仿的是微信的搖一搖,是一個完整的demo,下載地址在最下面.下面是demo截圖:
步驟:
1.手機搖動監聽,首先要實現傳感器接口SensorEventListener.
/**開始重力傳感器的檢測*/ public void start() { // 獲得傳感器管理器 SensorManager 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); } }
2.啟動手掌開合動畫,這個手掌其實是上下兩部分組成的,分別開啟一個上下垂直動畫.
/** 搖一搖手掌上部分動畫 */ public AnimationSet getUpAnim(Handler handler) { 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.8f); mytranslateanimup0.setDuration(OPEN_TIME); mytranslateanimup0.setAnimationListener(getLineVisibleListener(handler)); TranslateAnimation mytranslateanimup1 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, +0.8f); mytranslateanimup1.setDuration(CLOSE_TIME); mytranslateanimup1.setStartOffset(OFFSET_TIME); mytranslateanimup1.setInterpolator(new AccelerateInterpolator(1)); mytranslateanimup1.setAnimationListener(getLineGoneListener(handler)); animup.addAnimation(mytranslateanimup0); animup.addAnimation(mytranslateanimup1); return animup; } /** 搖一搖手掌下部分動畫 */ public AnimationSet getDownAnim() { 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.8f); mytranslateanimdn0.setDuration(OPEN_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.8f); mytranslateanimdn1.setDuration(CLOSE_TIME); mytranslateanimdn1.setStartOffset(OFFSET_TIME); mytranslateanimdn1.setInterpolator(new AccelerateInterpolator(1)); animdn.addAnimation(mytranslateanimdn0); animdn.addAnimation(mytranslateanimdn1); return animdn; }
3.結果頁動畫,重新搖一搖時,也會啟動一個動畫將結果頁移動到最下方然后消失.就跟微信搖到了人以后,彈出的個人信息卡一樣.
demo下載地址:http://files.cnblogs.com/files/wangyuehome/Shake.zip