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(), "抱歉,暂时没有找到在同一时刻摇一摇的人。\n再试一次吧!", 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在同一时刻摇一摇的人。\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;
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(), "抱歉,暂时没有找到在同一时刻摇一摇的人。\n再试一次吧!", 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在同一时刻摇一摇的人。\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();
 }
 }
}

 第二:一个检测手机摇晃的监听器类ShakeListener ,代码如下:

package com.android.shake; 

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.util.Log; 

/**
 * 一个检测手机摇晃的监听器
 */
public class ShakeListener implements SensorEventListener {
 // 速度阈值,当摇晃速度达到这值后产生作用
 private static final int SPEED_SHRESHOLD = 2000;
 // 两次检测的时间间隔
 private static final int UPTATE_INTERVAL_TIME = 70;
 // 传感器管理器
 private SensorManager sensorManager;
 // 传感器
 private Sensor sensor;
 // 重力感应监听器
 private OnShakeListener onShakeListener;
 // 上下文
 private Context mContext;
 // 手机上一个位置时重力感应坐标
 private float lastX;
 private float lastY;
 private float lastZ;
 // 上次检测时间
 private long lastUpdateTime; 

 // 构造器
 public ShakeListener(Context c) {
 // 获得监听对象
 mContext = c;
 start();
 } 

 // 开始
 public void start() {
 // 获得传感器管理器
 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);
 } 

 } 

 // 停止检测
 public void stop() {
 sensorManager.unregisterListener(this);
 } 

 // 设置重力感应监听器
 public void setOnShakeListener(OnShakeListener listener) {
 onShakeListener = listener;
 } 

 // 重力感应器感应获得变化数据
 public void onSensorChanged(SensorEvent event) {
 // 现在检测时间
 long currentUpdateTime = System.currentTimeMillis();
 // 两次检测的时间间隔
 long timeInterval = currentUpdateTime - lastUpdateTime;
 // 判断是否达到了检测时间间隔
 if (timeInterval < UPTATE_INTERVAL_TIME)
  return;
 // 现在的时间变成last时间
 lastUpdateTime = currentUpdateTime; 

 // 获得x,y,z坐标
 float x = event.values[0];
 float y = event.values[1];
 float z = event.values[2]; 

 // 获得x,y,z的变化值
 float deltaX = x - lastX;
 float deltaY = y - lastY;
 float deltaZ = z - lastZ; 

 // 将现在的坐标变成last坐标
 lastX = x;
 lastY = y;
 lastZ = z; 

 double speed = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ
  * deltaZ)
  / timeInterval * 10000;
 // 达到速度阀值,发出提示
 if (speed >= SPEED_SHRESHOLD) {
  onShakeListener.onShake();
 }
 } 

 public void onAccuracyChanged(Sensor sensor, int accuracy) { 

 } 

 // 摇晃监听接口
 public interface OnShakeListener {
 public void onShake();
 } 

}

代码:

package com.android.shake; 

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.util.Log; 

/**
 * 一个检测手机摇晃的监听器
 */
public class ShakeListener implements SensorEventListener {
 // 速度阈值,当摇晃速度达到这值后产生作用
 private static final int SPEED_SHRESHOLD = 2000;
 // 两次检测的时间间隔
 private static final int UPTATE_INTERVAL_TIME = 70;
 // 传感器管理器
 private SensorManager sensorManager;
 // 传感器
 private Sensor sensor;
 // 重力感应监听器
 private OnShakeListener onShakeListener;
 // 上下文
 private Context mContext;
 // 手机上一个位置时重力感应坐标
 private float lastX;
 private float lastY;
 private float lastZ;
 // 上次检测时间
 private long lastUpdateTime; 

 // 构造器
 public ShakeListener(Context c) {
 // 获得监听对象
 mContext = c;
 start();
 } 

 // 开始
 public void start() {
 // 获得传感器管理器
 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);
 } 

 } 

 // 停止检测
 public void stop() {
 sensorManager.unregisterListener(this);
 } 

 // 设置重力感应监听器
 public void setOnShakeListener(OnShakeListener listener) {
 onShakeListener = listener;
 } 

 // 重力感应器感应获得变化数据
 public void onSensorChanged(SensorEvent event) {
 // 现在检测时间
 long currentUpdateTime = System.currentTimeMillis();
 // 两次检测的时间间隔
 long timeInterval = currentUpdateTime - lastUpdateTime;
 // 判断是否达到了检测时间间隔
 if (timeInterval < UPTATE_INTERVAL_TIME)
  return;
 // 现在的时间变成last时间
 lastUpdateTime = currentUpdateTime; 

 // 获得x,y,z坐标
 float x = event.values[0];
 float y = event.values[1];
 float z = event.values[2]; 

 // 获得x,y,z的变化值
 float deltaX = x - lastX;
 float deltaY = y - lastY;
 float deltaZ = z - lastZ; 

 // 将现在的坐标变成last坐标
 lastX = x;
 lastY = y;
 lastZ = z; 

 double speed = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ
  * deltaZ)
  / timeInterval * 10000;
 // 达到速度阀值,发出提示
 if (speed >= SPEED_SHRESHOLD) {
  onShakeListener.onShake();
 }
 } 

 public void onAccuracyChanged(Sensor sensor, int accuracy) { 

 } 

 // 摇晃监听接口
 public interface OnShakeListener {
 public void onShake();
 } 

}

 第三:必须在AndroidManifest.xml中添加权限,否侧摇动时不能监听

<uses-permission android:name="android.hardware.sensor.accelerometer"/>

第四:效果图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android实现摇一摇功能

    实现"摇一摇"功能,其实很简单,就是检测手机的重力感应,具体实现代码如下: 1.在 AndroidManifest.xml 中添加操作权限 2.实现代码 package com.xs.test; import android.app.Activity; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; impo

  • Android编程使用加速度传感器实现摇一摇功能及优化的方法详解

    本文实例讲述了Android编程使用加速度传感器实现摇一摇功能及优化的方法.分享给大家供大家参考,具体如下: 目前很多应用已经实现了摇一摇功能,这里通过讲解该功能的原理及实现回顾一下加速度传感器的使用: 1.首先获得传感器管理器的实例 sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); 2.通过传感器管理器获得加速传感器 accelerateSensor = getSensorMana

  • Android利用传感器实现微信摇一摇功能

    本文实例为大家分享了Android微信摇一摇功能的实现方法,供大家参考,具体内容如下 import java.util.ArrayList; import java.util.List; import java.util.Random; import android.app.Activity; import android.app.Service; import android.content.res.Resources; import android.hardware.Sensor; impo

  • android 类似微信的摇一摇功能实现思路及代码

    复制代码 代码如下: package com.eboy.testyaoyiyao; import java.text.SimpleDateFormat; import java.util.Date; import android.app.Activity; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import

  • Android 微信摇一摇功能实现详细介绍

    Android 微信摇一摇功能实现,最近学习传感器,就想实现摇一摇的功能,上网查了些资料,就整理下.如有错误,还请指正. 开发环境 Android Studio 2.2.1 JDK1.7 API 24 Gradle 2.2.1 相关知识点 加速度传感器 补间动画 手机震动 (Vibrator) 较短 声音/音效 的播放 (SoundPool) 案例: 我们接下来分析一下这个案例, 当用户晃动手机时, 会触发加速传感器, 此时加速传感器会调用相应接口供我们使用, 此时我们可以做一些相应的动画效果,

  • java仿微信摇一摇实现播放音乐

    摇一摇功能是使用手机加速度传感器来判断是否处于摇一摇状态,从而进行相应的操作. 1.将音乐文件放在res/raw下,如果没有raw,创建一个 2.布局文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http:/

  • Android实现iPhone晃动撤销输入功能 Android仿微信摇一摇功能

    很多程序中我们可能会输入长文本内容,比如短信,写便笺等,如果想一次性撤销所有的键入内容,很多手机需要一直按住退格键逐字逐句的删除,稍稍麻烦,不过在iPhone上,有个人性化的功能,当我们想要去撤销刚刚输入的所有内容的时候,可以轻轻晃动手机,会弹出提示框,点击确定就可以清空内容,如下图: 在android中,一般手机貌似没有定制这个功能,不过我们可以自己去实现这样的功能,放置在我们的项目程序中,体现更人性化的设计,思路很简单,主要是利用手机内置的加速度传感器装置,其实大家一定会想到微信的"摇一摇&

  • Android利用传感器仿微信摇一摇功能

    传感器 简单的介绍一下传感器: 就是设备用来感知周边环境变化的硬件. Android中的传感器包含在传感器框架中,属于android.hardware.*(硬件部分) 传感器框架主要包含四个部分: ① SensorManager:用来获取传感器的入口,它是一个系统的服务,还可以为传感器注册与取消注册监听 ② Sensor: 具体的传感器,包含了传感器的名字,类型,采样率 ③ SensorEvent:传感器事件,包含了传感器采集回来的数据,传感器的精度 ④ SensorEventListener:

  • 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 androi

  • Android实现短信、微信、微博分享功能

    在纠结了几天的图表功能之后,我开始开发一个新的功能.即分享内容到短信.微信.微博等渠道,对应的我有一个简单的 Task: 在 Toolbar 写分享的按钮 绘制一个 Android 的分享页面 编写短信分享示例 编写社交分享 在这一天,我只完成了前面的三部分. Toolbar 上的分享按钮 在 Toolbar 主要还是靠 ImageView 来绘制右上角的分享按钮: <?xml version="1.0" encoding="utf-8"?> <a

  • Android+Html5混合开发仿微信朋友圈

    开发之前 大约从去年开始吧, 也可能是前年 Html5好像火得不得了, 不得了...总能从网上听说到 XXX混合开发, 为了紧跟潮流(虽然有点儿晚了), 咱们也看看Android+Html5混合开发是怎样的! 今天带来的案例是微信的朋友圈, 因为我觉得是微信把H5给"捧红了". 不过丑话说在前头, 咱们的仿朋友圈可是"低仿", 只是把混合开发的大致流程说说, 界面可能不堪入目...见谅.. 开发环境 Android Studio 2.2.2 JDK1.7 API 2

  • Unity3D移动端实现摇一摇功能

    手机摇一摇功能在平时项目开发中是很常见的需求,利用Unity的重力感应可以很方便的实现该功能. Unity简化了重力感应的开发, 通过访问Input.acceleration属性,取回加速度传感器的值.首先我们看一下重力传感器的方向问题.Unity3D中重量的取值范围是 -1.0 到 +1.0. X轴:home按键在下手机面朝天向右旋转90度重力分量为+1.0  向左旋转90度重力分量为-1.0 Y轴:home按键在上手机背朝自己重力分量为+1.0 home按键在下手机面朝自己重力分量为-1.0

  • 微信小程序开发摇一摇功能

    微信小程序摇一摇 方法定义: let shakeInfo = { openFlag: false,// 是否开启摇一摇,*****注意:如果是小程序全局监听摇一摇,这里默认为true shakeSpeed: 110,//设置阈值,越小越灵敏 shakeStep: 2000,//摇一摇成功后间隔 lastTime: 0,//此变量用来记录上次摇动的时间 x: 0, y: 0, z: 0, lastX: 0, lastY: 0, lastZ: 0, //此组变量分别记录对应 x.y.z 三轴的数值和

  • Android 重力传感器在游戏开发中的应用

    手势操作可以说是智能手机的一种魅力所在,前两节给大家讲解了两种有趣的手势操作,将它们置于游戏当中,大大提升了游戏的可玩性和趣味性.本节将继续介绍智能手机的另一种神奇之处:传感器.    一.何为传感器 所谓传感器就是能够探测如光.热.温度.重力.方向等等的装置.    二.Android提供了哪些传感器 1.加速度传感器(重力传感器) 2.陀螺仪传感器 3.光传感器 4.恒定磁场传感器 5.方向传感器 6.恒定的压力传感器 7.接近传感器 8.温度传感器 今天我们给大家介绍的是游戏开发中最最常见

  • Android编程之重力感应用法分析

    本文实例讲述了Android编程之重力感应用法.分享给大家供大家参考,具体如下: 重力感应主要是依靠手机的加速度传感器(accelerometer)来实现 在Android的开发中一共有八种传感器但是不一定每一款真机都支持这些传感器.因为很多功能用户根本不care的所以可能开发商会把某些功能屏蔽掉.还是得根据真机的实际情况来做开发,下面主要讨论加速度传感器的具体实现方式,传感器名称如下: 加速度传感器(accelerometer) 陀螺仪传感器(gyroscope) 环境光照传感器(light)

随机推荐