zoukankan      html  css  js  c++  java
  • Android Studio学习路程(13)

    今天在网上学习了几个新的知识点,一个是传感器,一个是添加音效池,一个是实现震动的效果。

    首先,安卓有很多自带的传感器,有加速度传感器等等,

    private SensorManager sensorManager;
    private Sensor sensor;
    ...
    sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    sensor = sensorManager.getDefaultSensor(Sensor.TYPE_GAME_ROTATION_VECTOR);
    这个是安卓官方文件给出的一个例子,添加音效池和添加震动的方法是差不多的;下面是一个实现微信摇一摇功能的APP的代码:
     1 package com.example.hp.wechat_shake;
     2 
     3 import android.content.Intent;
     4 import android.os.Bundle;
     5 import android.support.v7.app.ActionBarActivity;
     6 import android.view.View;
     7 import android.widget.Button;
     8 
     9 public class MainActivity extends ActionBarActivity implements View.OnClickListener {
    10 
    11     private Button mButton;
    12 
    13     @Override
    14     protected void onCreate(Bundle savedInstanceState) {
    15         super.onCreate(savedInstanceState);
    16         setContentView(R.layout.activity_main);
    17 
    18         //初始化控件
    19         initUI();
    20 
    21     }
    22     private void initUI() {
    23         mButton = (Button) findViewById(R.id.btn_shake);
    24         findViewById(R.id.btn_shake).setOnClickListener(this);
    25     }
    26 
    27     @Override
    28     public void onClick(View view) {
    29         Intent intent = new Intent();
    30         switch(view.getId()){
    31             case R.id.btn_shake:
    32                 intent.setClass(this,ShakeActivity.class);
    33                 break;
    34         }
    35         startActivity(intent);
    36     }
    37 }
    MainActivity
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <RelativeLayout
     3     xmlns:android="http://schemas.android.com/apk/res/android"
     4     xmlns:tools="http://schemas.android.com/tools"
     5     android:layout_width="match_parent"
     6     android:layout_height="match_parent"
     7     tools:context="com.example.hp.wechat_shake.MainActivity">
     8 
     9    <Button
    10        android:id="@+id/btn_shake"
    11        android:text="微信摇一摇"
    12        android:textSize="30dp"
    13        android:layout_width="match_parent"
    14        android:layout_height="65dp"/>
    15 </RelativeLayout>
    MainActivity_XML
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <RelativeLayout
     3     xmlns:android="http://schemas.android.com/apk/res/android"
     4     xmlns:tools="http://schemas.android.com/tools"
     5     android:layout_width="match_parent"
     6     android:layout_height="match_parent"
     7     android:background="#000"
     8     tools:context="com.example.hp.wechat_shake.ShakeActivity">
     9 
    10     <ImageView
    11         android:id="@+id/iv_shake_img"
    12         android:layout_width="wrap_content"
    13         android:layout_height="wrap_content"
    14         android:src="@drawable/shakehideimg_man2"
    15         android:layout_centerInParent="true"/>
    16 
    17     <LinearLayout
    18         android:id="@+id/id_shake_layout"
    19         android:layout_width="match_parent"
    20         android:layout_height="match_parent"
    21         android:orientation="vertical"
    22         android:gravity="center">
    23 
    24         <ImageView
    25             android:src="@drawable/shake_logo_up"
    26             android:id="@+id/iv_shake_up"
    27             android:layout_width="wrap_content"
    28             android:layout_height="wrap_content"/>
    29 
    30         <ImageView
    31             android:src="@drawable/shake_logo_down"
    32             android:id="@+id/iv_shake_down"
    33             android:layout_width="wrap_content"
    34             android:layout_height="wrap_content"/>
    35 
    36     </LinearLayout>
    37 
    38 </RelativeLayout>
    ShakeActivity_XML
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <manifest package="com.example.hp.wechat_shake"
     3           xmlns:android="http://schemas.android.com/apk/res/android">
     4     /*******振动器使用权限**********/
     5     <uses-permission android:name="android.permission.VIBRATE"/>
     6 
     7     <application
     8         android:allowBackup="true"
     9         android:icon="@mipmap/ic_launcher"
    10         android:label="@string/app_name"
    11         android:supportsRtl="true"
    12         android:theme="@style/AppTheme">
    13         <activity android:name=".MainActivity">
    14             <intent-filter>
    15                 <action android:name="android.intent.action.MAIN"/>
    16 
    17                 <category android:name="android.intent.category.LAUNCHER"/>
    18             </intent-filter>
    19         </activity>
    20         <activity android:name=".ShakeActivity">
    21         </activity>
    22     </application>
    23 
    24 </manifest>
    manifest_XML
      1 package com.example.hp.wechat_shake;
      2 
      3 import android.content.Context;
      4 import android.hardware.Sensor;
      5 import android.hardware.SensorEvent;
      6 import android.hardware.SensorEventListener;
      7 import android.hardware.SensorManager;
      8 import android.media.AudioManager;
      9 import android.media.SoundPool;
     10 import android.os.Bundle;
     11 import android.os.Vibrator;
     12 import android.support.v7.app.ActionBarActivity;
     13 import android.view.animation.Animation;
     14 import android.view.animation.AnimationSet;
     15 import android.view.animation.TranslateAnimation;
     16 import android.widget.ImageView;
     17 
     18 public class ShakeActivity extends ActionBarActivity implements SensorEventListener{
     19 
     20     private ImageView mShakeImg;
     21     private ImageView mShakeUp;
     22     private ImageView mShakeDown;
     23     private SensorManager mSensorManager;
     24     private Sensor mSensor;
     25     private AnimationSet mSetUp;
     26     private AnimationSet mSetDown;
     27     private SoundPool mSoundPool;
     28     private int loadId;
     29     private Vibrator mVibrator;
     30 
     31     @Override
     32     protected void onCreate(Bundle savedInstanceState) {
     33         super.onCreate(savedInstanceState);
     34         setContentView(R.layout.activity_shake);
     35         //初始化控件
     36         initUI();
     37         //初始化动画
     38         initAnimation();
     39         //初始化音效池
     40         initSoundPool();
     41         //初始化振动器
     42         initVibrator();
     43 
     44     }
     45 
     46     private void initVibrator() {
     47         //获取振动器管理者对象
     48         mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
     49     }
     50 
     51     private void initSoundPool() {
     52         //获取音效池对象
     53         mSoundPool = new SoundPool(2, AudioManager.STREAM_MUSIC,0);//2代表音效池最多下载两个播放器,中间的参数代表播放器的类型,最后一个0代表源文件的一个优先级
     54         //加载音效到音效池当中
     55         loadId=mSoundPool.load(this,R.raw.awe,1);
     56 
     57     }
     58 
     59     private void initUI() {
     60         mShakeImg = (ImageView) findViewById(R.id.iv_shake_img);
     61         mShakeUp = (ImageView) findViewById(R.id.iv_shake_up);
     62         mShakeDown = (ImageView) findViewById(R.id.iv_shake_down);
     63         //1.获取传感器管理者对象
     64         mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
     65         //2.获取指定的传感器对象---加速度传感器
     66         mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
     67         //3.注册传感器对象
     68         mSensorManager.registerListener(this,mSensor,SensorManager.SENSOR_DELAY_NORMAL);
     69 
     70     }
     71 
     72     @Override
     73     protected void onDestroy() {
     74         //4.注销传感器对象
     75         super.onDestroy();
     76         mSensorManager.unregisterListener(this);
     77     }
     78 
     79     @Override
     80     public void onSensorChanged(SensorEvent sensorEvent) {
     81         /*当传感器的数值发生改变时会调用的方法(函数)*/
     82         float[] values = sensorEvent.values;
     83         float x = values[0];
     84         float y = values[1];
     85         float z = values[3];
     86         int minValue = 12;
     87         if(Math.abs(x)>minValue||Math.abs(y)>minValue||Math.abs(z)>minValue){
     88             //开始震动
     89             long[]patten = {300,500};
     90             mVibrator.vibrate(patten,-1);
     91 
     92             //开始播放音效
     93             mSoundPool.play(loadId,1,1,1,0,1);
     94 
     95 
     96             //开始动画效果
     97             mShakeUp.startAnimation(mSetUp);
     98             mShakeDown.startAnimation(mSetDown);
     99 
    100         }
    101     }
    102 
    103     @Override
    104     public void onAccuracyChanged(Sensor sensor, int i) {
    105         /*当传感器的精度发生改变时会调用的方法*/
    106     }
    107 
    108     private void initAnimation(){
    109         //上面图片对应的动画效果
    110         TranslateAnimation mAnimationUp = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,1);
    111         mAnimationUp.setDuration(500);//设置上面的图片向上的时间为5秒
    112         TranslateAnimation mAnimationUpDown = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,1,Animation.RELATIVE_TO_SELF,0);
    113         mAnimationUpDown.setDuration(500);
    114         mSetUp = new AnimationSet(true);
    115         //将上面的一张图片的上下移动的动画效果放到一个集合里
    116         mSetUp.addAnimation(mAnimationUp);
    117         mSetUp.addAnimation(mAnimationUpDown);
    118         //设置动画之间的执行时间差
    119         mSetUp.setStartOffset(500);
    120 
    121         TranslateAnimation mAnimationDown = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,-1);
    122         mAnimationDown.setDuration(500);//设置上面的图片向上的时间为5秒
    123         TranslateAnimation mAnimationDownUp = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,-1,Animation.RELATIVE_TO_SELF,0);
    124         mAnimationDownUp.setDuration(500);
    125         mSetDown = new AnimationSet(true);
    126         //将下面的一张图片的上下移动的动画效果放到一个集合里
    127         mSetDown.addAnimation(mAnimationDown);
    128         mSetDown.addAnimation(mAnimationDownUp);
    129         //设置动画之间的执行时间差
    130         mSetDown.setStartOffset(500);
    131 
    132     }
    133 }
    ShakeActivity




  • 相关阅读:
    修改input标签输入样式
    CSS3的transform 转换
    前端小知识--区分get和post请求
    JS面向对象--你真的理解闭包了吗?
    px,em,rem的区别
    傻瓜式教程--实现登录页面的验证码以及验证(VUE)
    基于RBAC权限管理的后台管理系统
    在VUE中实现打印
    关于三层架构的好文章
    RabbitMQ常用命令、管理界面
  • 原文地址:https://www.cnblogs.com/mxk123456/p/12398998.html
Copyright © 2011-2022 走看看