- 浏览: 126411 次
- 性别:
- 来自: 福州
文章分类
最新评论
-
JavaEEdyc:
http://m.qianka.com/shoutu?u=21 ...
关于anroid设置webview背景方法探讨 -
JavaEEdyc:
http://m.qianka.com/shoutu?u=21 ...
android中的webview 加载html,并可以实现java调用js -
JavaEEdyc:
http://m.qianka.com/shoutu?u=21 ...
android ScrollView 与listView共存冲突问题解决方法(附图) -
zhangyang5023637:
讲的挺明白的。
android中的webview 加载html,并可以实现java调用js -
JavaEEdyc:
android中的webview 加载html,并可以实现ja ...
关于anroid设置webview背景方法探讨
直接看代码
1:配置文件activity_main.xml
java代码
重写摇一摇监听事件:
最后资源文件在附件代码中会给出。效果图
1:配置文件activity_main.xml
<?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:background="#111" android:orientation="vertical" > <ImageView android:id="@+id/shakeBg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:contentDescription="@null" android:src="@drawable/shakehideimg_man" /> <LinearLayout android:id="@+id/shake_content" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:gravity="center" android:orientation="vertical" > <RelativeLayout android:id="@+id/shakeImgUp" android:layout_width="fill_parent" android:layout_height="140dip" android:background="#111" android:visibility="visible" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:contentDescription="@null" android:src="@drawable/shake_logo_up" /> </RelativeLayout> <RelativeLayout android:id="@+id/shakeImgDown" android:layout_width="fill_parent" android:layout_height="140dip" android:background="#111" android:visibility="visible" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:contentDescription="@null" android:src="@drawable/shake_logo_down" /> </RelativeLayout> </LinearLayout> </RelativeLayout>
java代码
package com.yancheng.shack; 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.Vibrator; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.view.animation.AnimationSet; import android.view.animation.TranslateAnimation; import android.widget.RelativeLayout; import android.widget.Toast; import com.yancheng.shack.ShakeListener.OnShakeListener; public class MainActivity extends Activity { private final int DURATION_TIME = 600; private ShakeListener mShakeListener = null; private Vibrator mVibrator; private RelativeLayout mImgUp; private RelativeLayout mImgDn; private SoundPool sndPool; private HashMap<Integer, Integer> soundPoolMap = new HashMap<Integer, Integer>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); mVibrator = (Vibrator) getApplication().getSystemService( VIBRATOR_SERVICE); // 检查设备是否有震动装置 // mVibrator.hasVibrator(); loadSound(); mShakeListener = new ShakeListener(this); // 监听到手机摇动 mShakeListener.setOnShakeListener(new OnShakeListener() { public void onShake() { startAnim(); } }); } /**** * 初始化控件 */ private void initView() { // TODO Auto-generated method stub mImgUp = (RelativeLayout) findViewById(R.id.shakeImgUp); mImgDn = (RelativeLayout) findViewById(R.id.shakeImgDown); } /**** * 获取音效 */ 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(DURATION_TIME); 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(DURATION_TIME); mytranslateanimup1.setStartOffset(DURATION_TIME); 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(DURATION_TIME); 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(DURATION_TIME); mytranslateanimdn1.setStartOffset(DURATION_TIME); animdn.addAnimation(mytranslateanimdn0); animdn.addAnimation(mytranslateanimdn1); mImgDn.startAnimation(animdn); // 动画监听,开始时显示加载状态, mytranslateanimdn0.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { mShakeListener.stop(); sndPool.play(soundPoolMap.get(0), (float) 0.2, (float) 0.2, 0, 0, (float) 0.6); } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { Toast.makeText(getBaseContext(), "摇一摇结束", Toast.LENGTH_SHORT) .show(); mShakeListener.start(); } }); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); if (mShakeListener != null) { mShakeListener.stop(); } } }
重写摇一摇监听事件:
package com.yancheng.shack; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; /** * 摇一摇监听事件 * @created 2014-08-19 * @author * */ public class ShakeListener implements SensorEventListener { private static final int SPEED_SHRESHOLD = 4500;//这个值越大需要越大的力气来摇晃手机 private static final int UPTATE_INTERVAL_TIME = 50; 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; lastUpdateTime = currentUpdateTime; float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; float deltaX = x - lastX; float deltaY = y - lastY; float deltaZ = z - lastZ; 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(); } }
最后资源文件在附件代码中会给出。效果图
发表评论
-
Android 返回键连续点击两次退出应用
2014-12-11 11:06 8768返回键连续点击两次退出应用,一般大家都是使用时间差来实现功能, ... -
android中getX(),getY() 与getRawX(),getRawY()分析
2014-12-09 12:13 3694[b]先看getX(),getY()源码解释 /** ... -
android ScrollView 与listView共存冲突问题解决方法(附图)
2013-05-12 16:18 8024[list] [*] [size=medium] 最近因 ... -
关于anroid设置webview背景方法探讨
2012-11-01 11:33 19752[b]最近的项目中一直关于webView设置背景色问题在研究, ... -
html5在android搭建滚动条
2012-04-26 23:33 3401最近的项目中出现类似IOS滚动条的效果。我们知道在html 中 ... -
css,img,url
2012-04-26 23:12 1958最近在做html5 android手机客户的开发,一个很简单的 ... -
HTML5和android等开发平台的使用及搭建环境
2012-04-23 00:05 1648对HTML5期待很久了,今天有时间也有机会接触一下了,和以前的 ... -
android webview WebViewClient
2012-04-17 23:33 3456最近两天一直在做一个网页连续测试的例子,循环统计各个页面的从向 ... -
Handler Only the original thread that created a view hierarchy can touch its vi
2012-03-16 18:48 2453错误例子:这里使用的Barprogress 在结束后就会报异常 ... -
android 面试题
2012-03-14 23:07 2197什么是Activity? 请描述一下Activ ... -
android webService
2012-03-14 22:43 1314找到几篇在android中使用webservice的文章,觉得 ... -
SharedPreferences
2012-03-09 12:42 2044今天做了对SharedPreferences做了简单的测试,并 ... -
JSONObject JSONARRAY
2012-03-04 00:38 35731.最近做的一个项目中传递的数据类型是Json格式的,所以在封 ... -
youmi移动广告平台
2012-03-02 21:57 1386前段时间,对智能手机投送广告做了一个简单测试。 其实,对于这些 ... -
android 关于图片的放大,缩小,旋转功能的实现(附源码)
2012-03-02 20:51 5180package funo.com.test; import ... -
android应用UI和用户体验
2012-03-02 20:37 793Android应用UI设计和用户体验的10个要点 随着移动 ... -
android listView
2011-12-03 16:18 751在android开发中ListView是比较常用的组件,它 ...
相关推荐
在Activity中加入下面这行代码,即可让当前Activity完全拥有微信摇一摇功能. ShakeListener mShaker = new ShakeListener(this); mShaker.setOnShakeListener(new ShakeListener.OnShakeListener() { public ...
在Android平台上,微信摇一摇功能的实现是一个有趣且实用的特性,它通过结合硬件传感器、动画效果和声音反馈来模拟真实的物理交互。下面我们将详细探讨实现这一功能所需的关键知识点。 1. **加速度传感器...
微信摇一摇功能是微信应用程序中的一个独特互动方式,它让用户通过晃动手机来与其他人互动或参与各种活动。在微信摇一摇源码中,我们可以深入理解这一功能背后的实现原理和技术细节。以下是对微信摇一摇源码相关知识...
在Android开发领域,"仿微信摇一摇"是一项常见的特效实现,它为用户提供了与微信应用相似的互动体验。微信的摇一摇功能是其众多特色功能之一,用户通过摇晃手机来触发特定的交互,比如摇出红包、添加新朋友或者参与...
【微信摇一摇功能解析】 微信摇一摇是微信应用程序中的一个特色互动功能,用户只需晃动手机,就能与其他用户产生随机的互动。这个功能在社交、娱乐和营销活动中广泛应用,比如摇红包、摇歌曲、摇电视节目互动等。本...
在Android平台上实现微信“摇一摇”功能是一个有趣且具有挑战性的任务,涉及到传感器数据的获取、处理以及用户交互的设计。下面将详细讲解这个过程中的关键知识点。 首先,"摇一摇"功能的核心在于手机内置的传感器...
命令窗口输入:1、adb shell;2、export CLASSPATH=/data/app/com.liujian.wechatjumphelper-1/base.apk;...然后再次运行apk点击“开始跳一跳”,运行微信打开摇一摇页面,开始游戏。接下来游戏便自己开始跳起来了
微信摇一摇功能是微信应用程序中的一个特色互动方式,它为用户提供了一种新颖的交互体验。这个"各种微信摇一摇demo"包含了模仿这一功能的示例代码,可以帮助开发者理解和实现类似的效果。下面我们将深入探讨摇一摇...
在Android开发中,实现“微信摇一摇”功能是一个相当有趣的互动体验,它结合了设备的传感器技术,尤其是重力感应器(Gravity Sensor),以及Vibrator服务来模拟真实世界中的摇晃动作。这个功能通常用于游戏、抽奖...
微信摇一摇动画是微信应用中的一个特色功能,让用户通过摇晃手机来触发特定的交互。这个功能在很多场合下被用作互动娱乐或者信息获取的手段,比如摇一摇领红包、摇一摇交友等。本文将详细介绍如何在自己的应用中实现...
在Android应用开发中,"仿微信摇一摇Demo"是一个常见的功能实现,它结合了设备的传感器技术,尤其是重力感应器(Sensor),以及振动器(Vibrator)和动画效果,来模拟微信的摇一摇交互体验。下面将详细介绍这个功能...
【Android高仿微信摇一摇Demo(带音效动画)】是一个典型的移动开发项目,主要展示了如何在Android平台上实现类似微信应用中的“摇一摇”功能。这一功能是微信社交体验的一部分,用户摇动手机后,应用会响应并触发特定...
在Android平台上开发一款仿微信摇骰子游戏,我们需要掌握一系列的关键技术点,这些技术涵盖了UI设计、动画处理、随机数生成以及事件监听等多个方面。以下是对这些知识点的详细阐述: 1. **UI设计**:首先,游戏界面...
在Android开发领域,微信摇一摇功能是一种深受用户喜爱的互动设计,它为应用程序增添了趣味性和交互性。本文将深入探讨如何在Android Studio环境中实现一个仿微信摇一摇的功能。 首先,我们需要理解“摇一摇”功能...
在Android平台上,"仿微信摇一摇"是一个常见的功能,用于模拟微信应用中的"摇一摇"交互体验。这个功能通常被用作一种新颖的用户输入方式,比如抽奖、互动游戏或者触发特定功能等。下面将详细介绍如何实现这样一个...
在Android平台上,实现“微信摇一摇”功能是一项有趣且具有挑战性的任务。这个功能让用户通过摇动手机来触发特定的交互,例如摇一摇获取红包、参与游戏或切换歌曲等。下面我们将深入探讨如何在Android应用中实现类似...