没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本实例主要使用了android的重力感应功能并配合动画效果实现,主要代码如下: 第一:ShakeActivity主类: package com.android.shake; 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.Handler; import a
资源推荐
资源详情
资源评论
android重力感应开发之微信摇一摇功能重力感应开发之微信摇一摇功能
本实例主要使用了android的重力感应功能并配合动画效果实现,主要代码如下:
第一:ShakeActivity主类:
package com.android.shake;
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.Handler;
import android.os.Vibrator;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.SlidingDrawer;
import android.widget.SlidingDrawer.OnDrawerCloseListener;
import android.widget.SlidingDrawer.OnDrawerOpenListener;
import android.widget.Toast;
import com.android.shake.ShakeListener.OnShakeListener;
public class ShakeActivity extends Activity{
ShakeListener mShakeListener = null;
Vibrator mVibrator;
private RelativeLayout mImgUp;
private RelativeLayout mImgDn;
private RelativeLayout mTitle;
private SlidingDrawer mDrawer;
private Button mDrawerBtn;
private SoundPool sndPool;
private HashMap<Integer, Integer> soundPoolMap = new HashMap<Integer, Integer>();
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.shake_activity);
//drawerSet ();//设置 drawer监听 切换 按钮的方向
mVibrator = (Vibrator)getApplication().getSystemService(VIBRATOR_SERVICE);
mImgUp = (RelativeLayout) findViewById(R.id.shakeImgUp);
mImgDn = (RelativeLayout) findViewById(R.id.shakeImgDown);
mTitle = (RelativeLayout) findViewById(R.id.shake_title_bar);
mDrawer = (SlidingDrawer) findViewById(R.id.slidingDrawer1);
mDrawerBtn = (Button) findViewById(R.id.handle);
mDrawer.setOnDrawerOpenListener(new OnDrawerOpenListener()
{ public void onDrawerOpened()
{
mDrawerBtn.setBackgroundDrawable(getResources().getDrawable(R.drawable.shake_report_dragger_down));
TranslateAnimation titleup = new
TranslateAnimation(Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,-
1.0f);
titleup.setDuration(200);
titleup.setFillAfter(true);
mTitle.startAnimation(titleup);
}
});
/* 设定SlidingDrawer被关闭的事件处理 */
mDrawer.setOnDrawerCloseListener(new OnDrawerCloseListener()
{ public void onDrawerClosed()
{
mDrawerBtn.setBackgroundDrawable(getResources().getDrawable(R.drawable.shake_report_dragger_up));
TranslateAnimation titledn = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,-
1.0f,Animation.RELATIVE_TO_SELF,0f);
titledn.setDuration(200);
titledn.setFillAfter(false);
mTitle.startAnimation(titledn);
}
});
loadSound() ;
mShakeListener = new ShakeListener(this);
mShakeListener.setOnShakeListener(new OnShakeListener() {
public void onShake() {
//Toast.makeText(getApplicationContext(), "抱歉,暂时没有找到在同一时刻摇一摇的人。再试一次吧!", Toast.LENGTH_SHORT).show();
startAnim(); //开始 摇一摇手掌动画
mShakeListener.stop();
sndPool.play(soundPoolMap.get(0), (float) 1, (float) 1, 0, 0,(float) 1.2);
new Handler().postDelayed(new Runnable(){
public void run(){
//Toast.makeText(getApplicationContext(), "抱歉,暂时没有找到\n在同一时刻摇一摇的人。再试一次吧!", 500).setGravity(Gravity.CENTER,0,0).show();
sndPool.play(soundPoolMap.get(1), (float) 1, (float) 1, 0, 0,(float) 1.0);
Toast mtoast;
mtoast = Toast.makeText(getApplicationContext(),
"抱歉,暂时没有找到\n在同一时刻摇一摇的人。\n再试一次吧!", 10);
//mtoast.setGravity(Gravity.CENTER, 0, 0);
mtoast.show();
mVibrator.cancel();
mShakeListener.start();
}
}, 2000);
}
});
}
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(1000);
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(1000);
mytranslateanimup1.setStartOffset(1000);
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(1000);
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(1000);
mytranslateanimdn1.setStartOffset(1000);
animdn.addAnimation(mytranslateanimdn0);
animdn.addAnimation(mytranslateanimdn1);
mImgDn.startAnimation(animdn);
}
public void startVibrato(){ //定义震动
mVibrator.vibrate( new long[]{500,200,500,200}, -1); //第一个{}里面是节奏数组, 第二个参数是重复次数,-1为不重复,非-1俄日从pattern的指定下标开始重复
}
public void shake_activity_back(View v) { //标题栏 返回按钮
this.finish();
}
public void linshi(View v) { //标题栏
startAnim();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mShakeListener != null) {
mShakeListener.stop();
}
}
}
代码:
package com.android.shake;
import java.io.IOException;
import java.util.HashMap;
import android.app.Activity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
剩余6页未读,继续阅读
资源评论
weixin_38742532
- 粉丝: 41
- 资源: 909
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 西门子200SMART系列PLC自由口通讯CRC校验程序 该程序已经实测
- 基于事件触发机制的多智能体系统事件触发控制,Matlab数值仿真实验
- 基于Dart语言的Flutter应用开发设计源码
- 基于SpringBoot与阿里云AI的智慧云相册双端设计源码
- 基于maven-assembly-plugin的Spring Boot项目环境打包设计源码
- 串联混合动力汽车模型预测能量管理程序设计,在MATLAB环境下,利用脚本编写串联模型,并基于CasADi模型预测控制算法工具,结合构型图与参数进行MPC能量算法程序编制,测试工况为CLTC-P工况(可
- microsoft-edge-dev-133.0.3014.0-1.x86_64.rpm
- abaqus 随机喷丸仿真,附带随机喷丸模型生成源程序,模型尺寸,丸粒尺寸,个数,角度,速度等均可自由改动 源程序讲解视频,模型操作,后处理操作,模型文件均有 喷丸微观仿真
- comsol实现激光熔覆的凝固相场树枝晶生长 考虑溶质、 相场 温度场耦合 提供资料 全套的模型文件和参考文献以及讲解视频 利用凝固组织的建模和验证可以减少获得所需组织的迭代成本 结合Marango
- 双馈电机三矢量模型预测控制
- 基于深度混合核极限学习机DHKELM的回归预测,优化算法采用的是北方苍鹰NGO,可替成其他方法
- 多项式曲线拟合,c代码,可实现1阶线性,2-4阶多项式曲线拟合,代码注释详细,方便移植,书写规范 图片有现场拟合参数的1-4阶的keil仿真结果和Excel对照图 备注一下,这是个多项式求解代码,求
- 基于SpringCloud的ZebraCloud设计源码项目,JavaScript与Java双语言支持,正在孵化中...
- 基于Yapi接口平台的接口方法文件自动生成设计源码
- 事件触发,微电网分层下垂控制 有应用图中文献算法的matlab仿真模型
- 基于Python的DNF装备搭配及伤害计算设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功