心血来潮,走进Android,准备开发一个摇一摇分歧表决器(PS:这个想法源自去年看的一个都市剧《约会专家》中主人公杭杭开发的分歧表决器APP)。

简述:摇一摇分歧表决器是一款Android App,通过将传统的手头剪刀布分歧表决游戏移植到智能手机上,玩家可以通过摇动手机还获取结果,PK对家。 (汗!)

目标:一款简单,易用的Android分歧表决App

设备要求:加速传感器,Android系统

涉及知识点:Android ImageView,TextView,RelativeLayout,Sensor,Vibrator,SoundPool

开始动手:

1.在Eclipse中创建Android 项目

2.准备资源文件,石头,剪刀,布,和玩法示意图,AppIcon四张图片,结果提示音(mp3)

3.创建布局文件(activity_splitter.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/main_layout"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><ImageViewandroid:id="@+id/image_result"android:layout_width="match_parent"android:layout_height="375dp"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:contentDescription="@string/image_desc_msg"android:scaleType="fitXY"android:scrollbars="none"android:src="@drawable/rules" /><TextViewandroid:id="@+id/text_msg"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_below="@id/image_result"android:layout_centerVertical="true"android:layout_marginTop="50dp"android:gravity="center_horizontal"android:text="@string/user_method_msg"android:textStyle="bold" />
</RelativeLayout>

4.实现思路

4.1启动App,在ImageView中展示玩法图片,TextView显示玩法说明;

4.2玩家摇动手机,应用程序通过加速传感器获得手机加速度,当加速度达到指定范围,发送更新UI界面消息;

4.3通过消息处理机制,更新UI界面,在ImageView中展示结果图片(石头,剪刀,布三者之一),TextView显示对应的文字说明,并伴随提示音和轻微震动。

5.开发实现

5.1该应用极其简单,仅有一个Activity,在ApplicationManifest.xml中配置启动界面

<activityandroid:name=".SplitterActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>

5.2应用程序使用到设备的震动,在ApplicationManifest.xml中配置权限

<uses-permission android:name="android.permission.VIBRATE" />

5.3具体开发Activity

需要熟悉:SensorManager,Sensor,SoundPool,Handler这几个类的使用,自己实现SensorEventListener接口方法,如下onSensorChanged,onAccuracyChanged方法。

public class SplitterActivity extends Activity implements SensorEventListener {private ImageView imageViewResult;private TextView textViewMsg;private int[][] result = new int[][] {{ R.drawable.rock, R.string.rock_result_msg },{ R.drawable.paper, R.string.paper_result_msg },{ R.drawable.scissors, R.string.scissors_result_msg } };private SensorManager sensorManager;private Sensor sensor;private Vibrator vibrator;private SoundPool soundPool;private int streamSoundId;private static final int UPDATE_VIEW = 0x01;private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {if (msg.what == UPDATE_VIEW) {if (vibrator.hasVibrator()) {vibrator.vibrate(new long[] { 200L, 500L }, -1);}soundPool.play(streamSoundId, 0.5F, 0.5F, 5, 0, 1.0F);Random random = new Random();int index = random.nextInt(result.length);imageViewResult.setImageResource(result[index][0]);textViewMsg.setText(result[index][1]);}}};public SplitterActivity() {}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.setContentView(R.layout.activity_splitter);imageViewResult = (ImageView) this.findViewById(R.id.image_result);textViewMsg = (TextView) this.findViewById(R.id.text_msg);sensorManager = (SensorManager) this.getSystemService(SENSOR_SERVICE);sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);vibrator = (Vibrator) this.getSystemService(VIBRATOR_SERVICE);soundPool = new SoundPool(10, AudioManager.STREAM_SYSTEM, 5);streamSoundId = soundPool.load(this, R.raw.call_result, 0);}@Overrideprotected void onResume() {super.onResume();sensorManager.registerListener(this, sensor,SensorManager.SENSOR_DELAY_NORMAL);}@Overrideprotected void onStop() {sensorManager.unregisterListener(this);if (null != vibrator) {vibrator.cancel();vibrator = null;}if (null != soundPool) {soundPool.release();soundPool = null;}super.onStop();}@Overridepublic void onSensorChanged(SensorEvent event) {if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {float[] values = event.values;if (isNormalAcceler(values)) {new Thread(new Runnable() {@Overridepublic void run() {Message msg = new Message();msg.what = UPDATE_VIEW;handler.sendMessage(msg);}}).start();}}}private boolean isNormalAcceler(float[] values) {int g = 15;return (Math.abs(values[0]) > g && Math.abs(values[1]) > g)|| Math.abs(values[2]) > g;}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {BackListener backListener = new BackListener();new AlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_info).setTitle(R.string.app_name).setMessage(R.string.exite_app_info).setPositiveButton(R.string.leave, backListener).setNegativeButton(R.string.without, backListener).show();return true;}return super.onKeyDown(keyCode, event);}private class BackListener implements DialogInterface.OnClickListener {@Overridepublic void onClick(DialogInterface dialog, int which) {switch (which) {case DialogInterface.BUTTON_POSITIVE:SplitterActivity.this.finish();break;case DialogInterface.BUTTON_NEGATIVE:break;default:break;}}}
}

6.效果图

7.总结

通读了Android官方开发文档之后,感觉不得要领。唯找出一个目标App,进行模仿,在此过程不断深入了解其中原理,API文档,反复回顾Android开发知识体系,久而久之就能开发自己的想要的Android应用了。

另外就是针对某一知识点,比如:Activity,ContentProvider,View 等做示例,实验,探究;最后将四大组件,各种布局结合起来,集成各种服务实现完备应用,这样就基本掌握了Android开发。接下来就该深入探究其中机理。

[Android]开发摇一摇分歧表决器过程相关推荐

  1. p750tm安装linux系统,Android 开发环境(虚拟机,LINUX, secureCRT)安装过程.pdf

    Android 开发环境(虚拟机,LINUX, secureCRT)安装过程 Android linux 开发环境(虚拟机,LINUX, secureCRT )安装过程 注意 由于selinux 打开 ...

  2. Android开发,实现摇一摇功能

    SensorManager对象: 常量: int  TYPE_ACCELEROMETER 加速度                  int  TYPE_ALL 所有类型,NexusOne默认为 加速度 ...

  3. android开发工程师三大历程

    作为一个 Android开发工程师,必须经历三大过程:初级.中级,和高级, 本文就讲述作为一个 Android开发工程师必须经历的三大历练过程:   一.初级Android开发工程师必须掌握的技能: ...

  4. Android开发之摇一摇

    Android开发之摇一摇 一.效果图 二.布局文件(activity_main) 三.布局文件(activity_yy) 四.java文件(MainActivity) 五.在AndroidManif ...

  5. android音乐播放器开发 SweetMusicPlayer 摇一摇换歌

    上一篇写了如何在线匹配歌词,http://blog.csdn.net/huweigoodboy/article/details/39878063,现在来讲讲摇一摇功能开发. 代码地址:https:// ...

  6. Android移动开发-利用加速度传感器开发仿微信摇一摇功能的实现

    加速度传感器是最常见的传感器,大部分Android手机都内置了加速度传感器,加速度传感器运用最广泛的功能就是微信的摇一摇功能,用户通过摇晃手机寻找周围的人,其它类似的应用还摇骰子.玩游戏等. 下面以摇 ...

  7. android开发利用传感器实现微信的摇一摇功能

    现在的不少应用都用到了摇动手机改变内容的功能,比如微信中的"摇一摇"功能.前两天要实现这个功能,稍微看了一下关于传感器Sensor的内容. 传感器有几种类型:        方向传 ...

  8. Android手机摇一摇的实现SensorEventListener

    Android手机摇一摇的实现SensorEventListener 看实例 package com.example.shakeactivity;import android.content.Cont ...

  9. Android 摇一摇(二)

    最近开发中摇一摇被应用的很广泛,本次是总结摇一摇开发过程中遇到的一些适配的问题,比如有些机型灵敏度比较高就比较容易触发,而有些机型则比较难触发,适配起来比较麻烦,现在给大家介绍一个比较好用的方法: 摇 ...

最新文章

  1. C语言输出素数简单,for语句计算输出10000以内最大素数怎么搞最简单??各位大神们...
  2. mysql查询case when_【原创】关于MySQL高级查询–case when
  3. wordpress房产信息网_Realia v3.1.2 wordpress房地产模板 租房网站模板
  4. WordPress主题-RiPro子主题|小八子主题v8.0版
  5. linux 开机 找不到 文件系统 下载文件系统就好了,开机启动找不到文件系统的修复步骤...
  6. 【MySQL快速入门】牛客网:条件查询(1)基础排序
  7. 推到 旋转矩阵公式_想知道旋转矩阵的带入公式
  8. 湖州南浔张静江:“满堂花醉三千客,一剑霜寒四十州”
  9. 程序员面试被问“你的缺点是什么”,该怎么回答?
  10. MCS9865串口卡并口卡驱动
  11. 怎么用计算机打游戏视频,网吧电脑可以边玩游戏边录视频吗?这样的方法很少人知道...
  12. 服务器显示404什么意思,404是什么意思?
  13. 含不等式的优化设计matlab,基于Matlab的齿轮传动优化设计
  14. 51单片机学习笔记7 -- 超声波测距
  15. 【cqbzoj1526】 分梨子 乱搞(不是dp) 解题报告 c++
  16. Idea scalac: Scala compiler JARs not found (module ‘XXXX‘): C:\Users\nanhu\.cache\co......
  17. vue项目首屏加载过慢解决方案
  18. GameFi 代币的单币与双币模型比较
  19. java类型参数推断_Java泛型类型推断
  20. 四十二、Fluent欧拉模型流化床模拟

热门文章

  1. vue---进行post和get请求
  2. 使用axis开发web service服务端
  3. 设计模式——6适配器模式(Adapter)
  4. Office 365 系列之一:初识Office 365
  5. 【JDBC 报错】Connections could not be acquired from the underlying database!
  6. 云计算读书笔记(二)
  7. iOS开发系列--通知与消息机制
  8. 在Eclipse或MyEclipse中安装findbugs插件
  9. VirtualBox虚拟机网络连接设置的四种方式
  10. 不看后悔 如何删除WIN7的100M隐藏分区