zoukankan      html  css  js  c++  java
  • Androidの高级交互之仿微信摇一摇(真心摇一摇,而不是像网传的就那么简单的震动一下)

    话不多说看代码

    布局文件:

    <?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);
            }
        }
        
        
    }

     附件怎么传啊?怎么我没看到哪里传附件啊,我没权限么,源码可以共享啊

  • 相关阅读:
    数据结构实现时的注意事项
    用编程解决生活中的问题
    用编程解决生活中的问题
    中英文对照 —— 生物学基本概念
    中英文对照 —— 生物学基本概念
    面向对象 —— 对类(class)的理解
    面向对象 —— 对类(class)的理解
    百家姓 —— 特别的姓氏与姓氏的由来
    百家姓 —— 特别的姓氏与姓氏的由来
    英文段子
  • 原文地址:https://www.cnblogs.com/bvin/p/2816840.html
Copyright © 2011-2022 走看看