Androidの高级交互之仿微信摇一摇(真心摇一摇,而不是像网传的就那么简单的震动一下)
来源:互联网 发布:查看端口占用linux 编辑:程序博客网 时间:2024/06/14 03:50
话不多说看代码
布局文件:
<?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:gravity="center" android:background="#666"> <ImageView android:id="@+id/iv_hide" android:src="@drawable/shakehideimg_man" android:scaleType="fitCenter" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true"/> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:gravity="center" android:layout_centerInParent="true"> <RelativeLayout android:id="@+id/frameTop" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#333" android:layout_weight="1"> <ImageView android:id="@+id/ivTop" android:src="@drawable/shake_logo_up" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <ImageView android:id="@+id/shake_line_up" android:background="@drawable/up" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" /> </RelativeLayout> <RelativeLayout android:id="@+id/frameBot" android:layout_weight="1" android:background="#333" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@+id/frameTop"> <ImageView android:id="@+id/ivBot" android:src="@drawable/shake_logo_down" android:layout_centerHorizontal="true" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <ImageView android:id="@+id/shake_line_down" android:background="@drawable/down" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" /> </RelativeLayout> </LinearLayout> </RelativeLayout>
java:
package cn.com.bvin.shake;import java.io.IOException;import android.app.Activity;import android.content.Context;import android.content.res.AssetFileDescriptor;import android.content.res.AssetManager;import android.graphics.Color;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.media.MediaPlayer;import android.os.Bundle;import android.util.Log;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup.LayoutParams;import android.view.animation.AccelerateInterpolator;import android.view.animation.Animation;import android.view.animation.Animation.AnimationListener;import android.view.animation.DecelerateInterpolator;import android.view.animation.TranslateAnimation;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;public class MainActivity extends Activity implements SensorEventListener,AnimationListener{ /** Called when the activity is first created. */ private SensorManager sMan; private Sensor sensor; private Animation topInAnim = null; private Animation topOutAnim = null; private Animation botInAnim = null; private Animation botOutAnim = null; private int duration =630; private ImageView ivTop; private ImageView ivBot; private ImageView shake_bg; private ImageView shake_line_up; private ImageView shake_line_down; private RelativeLayout shake_panel_up; private RelativeLayout shake_panel_down; private int scr_h,src_w; private MediaPlayer mPlayer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); scr_h = getWindowManager().getDefaultDisplay().getHeight(); src_w = getWindowManager().getDefaultDisplay().getWidth(); initSensorManager(); initViews(); initAnim(); initPlayer(); } private void initPlayer(){ mPlayer = new MediaPlayer(); //mPlayer.setDataSource(context, uri); AssetManager aMan = this.getAssets(); try { AssetFileDescriptor fileDescriptor = aMan.openFd("shake_sound_male.mp3"); mPlayer.setDataSource(fileDescriptor.getFileDescriptor(),fileDescriptor.getStartOffset(),fileDescriptor.getLength()); mPlayer.prepare(); //mPlayer.start(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void initSensorManager(){ sMan = (SensorManager)getSystemService(Context.SENSOR_SERVICE); sensor = sMan.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); sMan.registerListener(this, sensor,SensorManager.SENSOR_DELAY_NORMAL); } private void initAnim(){ topOutAnim = new TranslateAnimation(0,0,0,-(float)scr_h/4); topOutAnim.setDuration(duration); topOutAnim.setInterpolator(new DecelerateInterpolator()); botOutAnim = new TranslateAnimation(0,0,0,(float)scr_h/4); botOutAnim.setDuration(duration); botOutAnim.setInterpolator(new DecelerateInterpolator()); topInAnim = new TranslateAnimation(0,0,-(float)scr_h/4,0); topInAnim.setDuration(duration); topInAnim.setInterpolator(new AccelerateInterpolator()); botInAnim = new TranslateAnimation(0,0,(float)scr_h/4,0); botInAnim.setDuration(duration); botInAnim.setInterpolator(new AccelerateInterpolator()); botInAnim.setAnimationListener(this); botOutAnim.setAnimationListener(this); } private void initViews(){ shake_bg = (ImageView)findViewById(R.id.iv_hide); shake_panel_up = (RelativeLayout)findViewById(R.id.frameTop); shake_panel_down = (RelativeLayout)findViewById(R.id.frameBot); shake_line_up = (ImageView)findViewById(R.id.shake_line_up); shake_line_down = (ImageView)findViewById(R.id.shake_line_down); shake_line_up.setVisibility(View.INVISIBLE); shake_line_down.setVisibility(View.INVISIBLE); ivTop = (ImageView)findViewById(R.id.ivTop); ivBot = (ImageView)findViewById(R.id.ivBot); } @Override public void onAnimationEnd(Animation arg0) { // TODO Auto-generated method stub if(arg0 == botOutAnim){//夹门打开 shake_panel_up.startAnimation(topInAnim); shake_panel_down.startAnimation(botInAnim); }else if(arg0.equals(botInAnim)){//夹门关闭 Log.e("wn", "sdgsdg"); sMan.registerListener(this, sensor,SensorManager.SENSOR_DELAY_NORMAL); shake_line_up.setVisibility(View.INVISIBLE); shake_line_down.setVisibility(View.INVISIBLE); shake_bg.setVisibility(View.INVISIBLE); //完成动画后,再次监听加速器 } } @Override public void onAnimationRepeat(Animation animation) { // TODO Auto-generated method stub } @Override public void onAnimationStart(Animation animation) { // TODO Auto-generated method stub } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Auto-generated method stub } @Override public void onSensorChanged(SensorEvent event) { // TODO Auto-generated method stub float x = event.values[SensorManager.DATA_X]; float y = event.values[SensorManager.DATA_Y]; float z = event.values[SensorManager.DATA_Z]; if(Math.abs(x)>=14||Math.abs(y)>=14||Math.abs(z)>=14){ shake_line_up.setVisibility(View.VISIBLE); shake_line_down.setVisibility(View.VISIBLE); shake_bg.setVisibility(View.VISIBLE); mPlayer.start(); shake_panel_up.startAnimation(topOutAnim); shake_panel_down.startAnimation(botOutAnim); sMan.unregisterListener(this); } } }
附件怎么传啊?怎么我没看到哪里传附件啊,我没权限么,源码可以共享啊
- Androidの高级交互之仿微信摇一摇(真心摇一摇,而不是像网传的就那么简单的震动一下)
- 高级交互之仿微信摇一摇(真心摇一摇,而不是像网传的就那么简单的震动一下)
- 简单的练习一下双哈希;就表达那么一个意思;
- 一看就会Android之手机震动的设置
- Android 简单的点击震动
- 如果男人真心欺骗,如果女人真心演戏,那么一切就是真的
- Android学习之震动你的手机
- 那么,就从今天开始记录自己的Java/Android爬坑之路吧。
- Android震动的使用
- Android震动的调用
- Android的手机震动
- android 震动的实现
- 技术真的就不是那么重要了(转载的,分享一下)
- 就那么不知不觉的过去了
- unity3d android的“摇一摇”+震动效果
- unity3d android的“摇一摇”+震动效果
- Unity调用Android原生的震动(简单)
- iOS 基于JavaScriptCore 不等webView加载完毕就交互,网页获取原生内容。 webView的高级用法之JS交互,js与oc的相互调用
- AndroidのUI之视图缓存
- Javaの堆栈之堆与栈的区别
- AndroidのActivity之退出返回栈
- AndroidのActivity之回顾跳转动画
- 动态内存分配算法
- Androidの高级交互之仿微信摇一摇(真心摇一摇,而不是像网传的就那么简单的震动一下)
- Javaの线程之多线程执行顺序
- 【OpenCV学习笔记】第一篇 搭建环境
- ChecksumException: Checksum error
- 【ios6.0 自学瞎折腾】(一) Helloworld!
- [windows phone自学笔记] 第一篇 HelloWorld!
- Win8应用开发 入门篇(一) Hello world!
- [windows phone自学笔记] 第二篇 Button控件
- Win8应用开发 入门篇(二)富文本和消息框