Android编程实现仿iphone抖动效果的方法(附源码)

本文实例讲述了Android编程实现仿iphone抖动效果的方法。分享给大家供大家参考,具体如下:

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical" >
 <LinearLayout
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal">
  <TextView
   android:id="@+id/tv0"
   android:layout_width="80dip"
   android:layout_height="94dip"
   android:drawableTop="@drawable/ic_launcher"
   android:text="@string/hello" />
  <TextView
   android:id="@+id/tv1"
   android:layout_width="80dip"
   android:layout_height="94dip"
   android:drawableTop="@drawable/ic_launcher"
   android:text="@string/hello" />
  <TextView
   android:id="@+id/tv2"
   android:layout_width="80dip"
   android:layout_height="94dip"
   android:drawableTop="@drawable/ic_launcher"
   android:text="@string/hello" />
  <TextView
   android:id="@+id/tv3"
   android:layout_width="80dip"
   android:layout_height="94dip"
   android:drawableTop="@drawable/ic_launcher"
   android:text="@string/hello" />
 </LinearLayout>
 <LinearLayout
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal">
  <TextView
   android:id="@+id/tv4"
   android:layout_width="80dip"
   android:layout_height="94dip"
   android:drawableTop="@drawable/ic_launcher"
   android:text="@string/hello" />
  <TextView
   android:id="@+id/tv5"
   android:layout_width="80dip"
   android:layout_height="94dip"
   android:drawableTop="@drawable/ic_launcher"
   android:text="@string/hello" />
  <TextView
   android:id="@+id/tv6"
   android:layout_width="80dip"
   android:layout_height="94dip"
   android:drawableTop="@drawable/ic_launcher"
   android:text="@string/hello" />
  <TextView
   android:id="@+id/tv7"
   android:layout_width="80dip"
   android:layout_height="94dip"
   android:drawableTop="@drawable/ic_launcher"
   android:text="@string/hello" />
 </LinearLayout>
 <LinearLayout
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal">
  <TextView
   android:id="@+id/tv8"
   android:layout_width="80dip"
   android:layout_height="94dip"
   android:drawableTop="@drawable/ic_launcher"
   android:text="@string/hello" />
  <TextView
   android:id="@+id/tv9"
   android:layout_width="80dip"
   android:layout_height="94dip"
   android:drawableTop="@drawable/ic_launcher"
   android:text="@string/hello" />
  <TextView
   android:id="@+id/tv10"
   android:layout_width="80dip"
   android:layout_height="94dip"
   android:drawableTop="@drawable/ic_launcher"
   android:text="@string/hello" />
  <TextView
   android:id="@+id/tv11"
   android:layout_width="80dip"
   android:layout_height="94dip"
   android:drawableTop="@drawable/ic_launcher"
   android:text="@string/hello" />
 </LinearLayout>
 <LinearLayout
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal">
  <TextView
   android:id="@+id/tv12"
   android:layout_width="80dip"
   android:layout_height="94dip"
   android:drawableTop="@drawable/ic_launcher"
   android:text="@string/hello" />
  <TextView
   android:id="@+id/tv13"
   android:layout_width="80dip"
   android:layout_height="94dip"
   android:drawableTop="@drawable/ic_launcher"
   android:text="@string/hello" />
  <TextView
   android:id="@+id/tv14"
   android:layout_width="80dip"
   android:layout_height="94dip"
   android:drawableTop="@drawable/ic_launcher"
   android:text="@string/hello" />
  <TextView
   android:id="@+id/tv15"
   android:layout_width="80dip"
   android:layout_height="94dip"
   android:drawableTop="@drawable/ic_launcher"
   android:text="@string/hello" />
 </LinearLayout>
 <LinearLayout
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal">
  <TextView
   android:id="@+id/tv16"
   android:layout_width="80dip"
   android:layout_height="94dip"
   android:drawableTop="@drawable/ic_launcher"
   android:text="@string/hello" />
  <TextView
   android:id="@+id/tv17"
   android:layout_width="80dip"
   android:layout_height="94dip"
   android:drawableTop="@drawable/ic_launcher"
   android:text="@string/hello" />
  <TextView
   android:id="@+id/tv18"
   android:layout_width="80dip"
   android:layout_height="94dip"
   android:drawableTop="@drawable/ic_launcher"
   android:text="@string/hello" />
  <TextView
   android:id="@+id/tv19"
   android:layout_width="80dip"
   android:layout_height="94dip"
   android:drawableTop="@drawable/ic_launcher"
   android:text="@string/hello" />
 </LinearLayout>
</LinearLayout>

代码:

package com.android.shake;
import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.RotateAnimation;
import android.widget.TextView;
import android.view.View;
import android.view.Window;
public class ShakeTestActivity extends Activity implements View.OnClickListener {
 private TextView mtv0;
 private TextView mtv1;
 private TextView mtv2;
 private TextView mtv3;
 private TextView mtv4;
 private TextView mtv5;
 private TextView mtv6;
 private TextView mtv7;
 private TextView mtv8;
 private TextView mtv9;
 private TextView mtv10;
 private TextView mtv11;
 private TextView mtv12;
 private TextView mtv13;
 private TextView mtv14;
 private TextView mtv15;
 private TextView mtv16;
 private TextView mtv17;
 private TextView mtv18;
 private TextView mtv19;
 private boolean mNeedShake = false;
 private boolean mStartShake = false;
 private static final int ICON_WIDTH = 80;
 private static final int ICON_HEIGHT = 94;
 private static final float DEGREE_0 = 1.8f;
 private static final float DEGREE_1 = -2.0f;
 private static final float DEGREE_2 = 2.0f;
 private static final float DEGREE_3 = -1.5f;
 private static final float DEGREE_4 = 1.5f;
 private static final int ANIMATION_DURATION = 80;
 private int mCount = 0;
 float mDensity;
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  setContentView(R.layout.main);
  DisplayMetrics dm = new DisplayMetrics();
  getWindowManager().getDefaultDisplay().getMetrics(dm);
  if (dm != null) {
   mDensity = dm.density;
  }
  mtv0 = (TextView) findViewById(R.id.tv0);
  mtv0.setOnClickListener(this);
  mtv1 = (TextView) findViewById(R.id.tv1);
  mtv1.setOnClickListener(this);
  mtv2 = (TextView) findViewById(R.id.tv2);
  mtv2.setOnClickListener(this);
  mtv3 = (TextView) findViewById(R.id.tv3);
  mtv3.setOnClickListener(this);
  mtv4 = (TextView) findViewById(R.id.tv4);
  mtv4.setOnClickListener(this);
  mtv5 = (TextView) findViewById(R.id.tv5);
  mtv5.setOnClickListener(this);
  mtv6 = (TextView) findViewById(R.id.tv6);
  mtv6.setOnClickListener(this);
  mtv7 = (TextView) findViewById(R.id.tv7);
  mtv7.setOnClickListener(this);
  mtv8 = (TextView) findViewById(R.id.tv8);
  mtv8.setOnClickListener(this);
  mtv9 = (TextView) findViewById(R.id.tv9);
  mtv9.setOnClickListener(this);
  mtv10 = (TextView) findViewById(R.id.tv10);
  mtv10.setOnClickListener(this);
  mtv11 = (TextView) findViewById(R.id.tv11);
  mtv11.setOnClickListener(this);
  mtv12 = (TextView) findViewById(R.id.tv12);
  mtv12.setOnClickListener(this);
  mtv13 = (TextView) findViewById(R.id.tv13);
  mtv13.setOnClickListener(this);
  mtv14 = (TextView) findViewById(R.id.tv14);
  mtv14.setOnClickListener(this);
  mtv15 = (TextView) findViewById(R.id.tv15);
  mtv15.setOnClickListener(this);
  mtv16 = (TextView) findViewById(R.id.tv16);
  mtv16.setOnClickListener(this);
  mtv17 = (TextView) findViewById(R.id.tv17);
  mtv17.setOnClickListener(this);
  mtv18 = (TextView) findViewById(R.id.tv18);
  mtv18.setOnClickListener(this);
  mtv19 = (TextView) findViewById(R.id.tv19);
  mtv19.setOnClickListener(this);
 }
 @Override
 public void onClick(View v) {
  if (!mStartShake) {
   mStartShake = true;
   mNeedShake = true;
   shakeAnimation(mtv0);
   shakeAnimation(mtv1);
   shakeAnimation(mtv2);
   shakeAnimation(mtv3);
   shakeAnimation(mtv4);
   shakeAnimation(mtv5);
   shakeAnimation(mtv6);
   shakeAnimation(mtv7);
   shakeAnimation(mtv8);
   shakeAnimation(mtv9);
   shakeAnimation(mtv10);
   shakeAnimation(mtv11);
   shakeAnimation(mtv12);
   shakeAnimation(mtv13);
   shakeAnimation(mtv14);
   shakeAnimation(mtv15);
   shakeAnimation(mtv16);
   shakeAnimation(mtv17);
   shakeAnimation(mtv18);
   shakeAnimation(mtv19);
  }
 }
 private void shakeAnimation(final View v) {
  float rotate = 0;
  int c = mCount++ % 5;
  if (c == 0) {
   rotate = DEGREE_0;
  } else if (c == 1) {
   rotate = DEGREE_1;
  } else if (c == 2) {
   rotate = DEGREE_2;
  } else if (c == 3) {
   rotate = DEGREE_3;
  } else {
   rotate = DEGREE_4;
  }
  final RotateAnimation mra = new RotateAnimation(rotate, -rotate, ICON_WIDTH * mDensity / 2, ICON_HEIGHT * mDensity / 2);
  final RotateAnimation mrb = new RotateAnimation(-rotate, rotate, ICON_WIDTH * mDensity / 2, ICON_HEIGHT * mDensity / 2);
  mra.setDuration(ANIMATION_DURATION);
  mrb.setDuration(ANIMATION_DURATION);
  mra.setAnimationListener(new AnimationListener() {
   @Override
   public void onAnimationEnd(Animation animation) {
    if (mNeedShake) {
     mra.reset();
     v.startAnimation(mrb);
    }
   }
   @Override
   public void onAnimationRepeat(Animation animation) {
   }
   @Override
   public void onAnimationStart(Animation animation) {
   }
  });
  mrb.setAnimationListener(new AnimationListener() {
   @Override
   public void onAnimationEnd(Animation animation) {
    if (mNeedShake) {
     mrb.reset();
     v.startAnimation(mra);
    }
   }
   @Override
   public void onAnimationRepeat(Animation animation) {
   }
   @Override
   public void onAnimationStart(Animation animation) {
   }
  });
  v.startAnimation(mra);
 }
 @Override
 public void onBackPressed() {
  if (!mNeedShake) {
   super.onBackPressed();
  } else {
   mNeedShake = false;
   mCount = 0;
   mStartShake = false;
  }
 }
}

完整实例代码代码点击此处本站下载。

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • 浅析Android手机卫士之抖动输入框和手机震动

    查看apiDemos,找到View/Animation/shake找到对应的动画代码,直接拷贝过来 当导入一个项目的时候,报R文件不存在,很多情况是xml文件出错了 Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake); et_phone.startAnimation(shake); 动画的xml文件shake.xml android:interpolator="@anim/cycle_7" interpo

  • Flash影片中的图片抖动锯齿解决方法

    AS 控制方法: _quality = "best"; 或者在发布向导中的HTML标签Quality项选择Best. 这样图片就不抖了

  • Android输入法与表情面板切换时的界面抖动问题解决方法

    昨天琢磨了下Android的输入法弹出模式,突然发现利用动态切换输入法的弹出模式可以解决输入法抖动的问题.具体是怎样的抖动呢?我们先看微博的反面教材. [具体表现为:表情面板与输入法面板高度不一致,从而导致弹出输入法(layout被挤压)时,同时又需要隐藏表情面板(layout被拉升),最终让界面产生了高度差抖动,所以在切换时明显会有不大好的抖动体验)] 使用了解决抖动的解决方案后,效果如下: [这样的方案明显比微博的切换更平滑] 老样子,先说思路.主要我们要用到两个输入法弹出模式,分别是:ad

  • jquery.messager.js插件导致页面抖动的解决方法

    消息弹出时页面总是抖动或者闪一下,找了很长时间没有找到原因,今天找到,原来是html没有声明解析规范 需要加上<!DOCTYPE> 标签 复制代码 代码如下: PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  • Android编程实现仿iphone抖动效果的方法(附源码)

    本文实例讲述了Android编程实现仿iphone抖动效果的方法.分享给大家供大家参考,具体如下: 布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" and

  • Android编程实现WebView全屏播放的方法(附源码)

    本文实例讲述了Android编程实现WebView全屏播放的方法.分享给大家供大家参考,具体如下: 最近因为项目要用webview加载html5的视频,开始不能全屏播,做了很久才做出来!那按我的理解说下怎么实现全屏吧. 首先写布局文件activity_main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.

  • Android编程实现仿心跳动画效果的方法

    本文实例讲述了Android编程实现仿心跳动画效果的方法.分享给大家供大家参考,具体如下: // 按钮模拟心脏跳动 private void playHeartbeatAnimation() { AnimationSet animationSet = new AnimationSet(true); animationSet.addAnimation(new ScaleAnimation(1.0f, 1.8f, 1.0f, 1.8f, Animation.RELATIVE_TO_SELF, 0.5

  • Android编程实现泡泡聊天界面实例详解(附源码)

    本文实例讲述了Android编程实现泡泡聊天界面的方法.分享给大家供大家参考,具体如下: 昨天写了个界面,实现了Android泡泡聊天界面.运行结果如下,点击发送按钮,屏幕就显示Text的内容. 我也是在网上的一份源码的基础上更改的,整个泡泡界面的实现要点: (1)主界面其实就是一个List View (2)文字显示界面其实就使用了android:background="@drawable/incoming"这个东西.背景图片的格式是xxx.9.png,专门用来缩放的,不然显示效果非常

  • php+jQuery+Ajax实现点赞效果的方法(附源码下载)

    本文实例讲述了php+jQuery+Ajax实现点赞效果的方法.分享给大家供大家参考,具体如下: 数据库设计 先准备两张表,pic表保存的是图片信息,包括图片对应的名称.路径以及图片"赞"总数,pic_ip则记录用户点击赞后的IP数据. CREATE TABLE IF NOT EXISTS `pic` ( `id` int(11) NOT NULL AUTO_INCREMENT, `pic_name` varchar(60) NOT NULL, `pic_url` varchar(60

  • Android编程单击图片实现切换效果的方法

    本文实例讲述了Android编程单击图片实现切换效果的方法.分享给大家供大家参考,具体如下: 新建一个Android项目,命名为FrameLayout 此实例主要操作src文件夹下的MainActivity.Java类文件和res/layout下的activity_main.xml布局文件 1.布局主页面代码activity_main.xml↓ <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android&qu

  • Android编程实现圆角边框布局效果的方法

    本文实例讲述了Android编程实现圆角边框布局效果的方法.分享给大家供大家参考,具体如下: 这里用的是TableLayout布局的.先看效果图 下面看下布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android" android:layout_width=&

  • Android编程实现通知栏进度条效果的方法示例

    本文实例讲述了Android编程实现通知栏进度条效果的方法.分享给大家供大家参考,具体如下: /** * 通知管理工具类 * * @description: * @author ldm * @date 2016-5-3 上午9:39:56 */ public class NotificationUtil { private Context mContext; // NotificationManager : 是状态栏通知的管理类,负责发通知.清楚通知等. private Notification

  • jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)

    这是一款基于jQuery的百叶窗焦点图动画,和之前介绍的CSS3百叶窗焦点图动画不同的是,它的兼容性更好,实用性更强,因为它是基于纯jQuery的,基本上所有浏览器都能够支持.焦点图的图片切换动画是百叶窗的动画方式,但也有几种不同的百叶窗动画,因此也不会觉得单调. 在线演示     源码下载 HTML代码 <div id="slider"> <img src="images/1.jpg" alt="我们1" title=&quo

  • Android编程基于自定义view实现公章效果示例【附源码下载】

    本文实例讲述了Android编程基于自定义view实现公章效果.分享给大家供大家参考,具体如下: 上次去一个公司面试,面试官问了一个题,怎么用android的自定义view实现一个公章的效果,据说这是华为之前的面试题,我想了下,要是公章的效果,最外层是一个圆,里面是一个五角星,但是这文字怎么画呢,比较难搞,后来回来看了下java的api,发现人家的Path里面本来就提供了这么一个方法: public void addArc(RectF oval, float startAngle, float

随机推荐