热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

Android编程实现仿iphone抖动效果的方法(附源码)-本文实例讲述了Android编程实现仿iphone抖动效果的方法。分享给大家供大家参考,具体如下:布局文件:

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

布局文件:



 
  
  
  
  
 
 
  
  
  
  
 
 
  
  
  
  
 
 
  
  
  
  
 
 
  
  
  
  
 

代码:

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程序设计有所帮助。


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
author-avatar
lmaster
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有