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

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

布局文件:

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

android:id="@+id/tv0"

android:layout_width="80dip"

android:layout_height="94dip"

android:drawableTop="@drawable/ic_launcher"

android:text="@string/hello" />

android:id="@+id/tv1"

android:layout_width="80dip"

android:layout_height="94dip"

android:drawableTop="@drawable/ic_launcher"

android:text="@string/hello" />

android:id="@+id/tv2"

android:layout_width="80dip"

android:layout_height="94dip"

android:drawableTop="@drawable/ic_launcher"

android:text="@string/hello" />

android:id="@+id/tv3"

android:layout_width="80dip"

android:layout_height="94dip"

android:drawableTop="@drawable/ic_launcher"

android:text="@string/hello" />

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

android:id="@+id/tv4"

android:layout_width="80dip"

android:layout_height="94dip"

android:drawableTop="@drawable/ic_launcher"

android:text="@string/hello" />

android:id="@+id/tv5"

android:layout_width="80dip"

android:layout_height="94dip"

android:drawableTop="@drawable/ic_launcher"

android:text="@string/hello" />

android:id="@+id/tv6"

android:layout_width="80dip"

android:layout_height="94dip"

android:drawableTop="@drawable/ic_launcher"

android:text="@string/hello" />

android:id="@+id/tv7"

android:layout_width="80dip"

android:layout_height="94dip"

android:drawableTop="@drawable/ic_launcher"

android:text="@string/hello" />

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

android:id="@+id/tv8"

android:layout_width="80dip"

android:layout_height="94dip"

android:drawableTop="@drawable/ic_launcher"

android:text="@string/hello" />

android:id="@+id/tv9"

android:layout_width="80dip"

android:layout_height="94dip"

android:drawableTop="@drawable/ic_launcher"

android:text="@string/hello" />

android:id="@+id/tv10"

android:layout_width="80dip"

android:layout_height="94dip"

android:drawableTop="@drawable/ic_launcher"

android:text="@string/hello" />

android:id="@+id/tv11"

android:layout_width="80dip"

android:layout_height="94dip"

android:drawableTop="@drawable/ic_launcher"

android:text="@string/hello" />

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

android:id="@+id/tv12"

android:layout_width="80dip"

android:layout_height="94dip"

android:drawableTop="@drawable/ic_launcher"

android:text="@string/hello" />

android:id="@+id/tv13"

android:layout_width="80dip"

android:layout_height="94dip"

android:drawableTop="@drawable/ic_launcher"

android:text="@string/hello" />

android:id="@+id/tv14"

android:layout_width="80dip"

android:layout_height="94dip"

android:drawableTop="@drawable/ic_launcher"

android:text="@string/hello" />

android:id="@+id/tv15"

android:layout_width="80dip"

android:layout_height="94dip"

android:drawableTop="@drawable/ic_launcher"

android:text="@string/hello" />

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

android:id="@+id/tv16"

android:layout_width="80dip"

android:layout_height="94dip"

android:drawableTop="@drawable/ic_launcher"

android:text="@string/hello" />

android:id="@+id/tv17"

android:layout_width="80dip"

android:layout_height="94dip"

android:drawableTop="@drawable/ic_launcher"

android:text="@string/hello" />

android:id="@+id/tv18"

android:layout_width="80dip"

android:layout_height="94dip"

android:drawableTop="@drawable/ic_launcher"

android:text="@string/hello" />

android:id="@+id/tv19"

android:layout_width="80dip"

android:layout_height="94dip"

android:drawableTop="@drawable/ic_launcher"

android:text="@string/hello" />

代码:

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值