Welcome

首页 / 移动开发 / Android / 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" > <LinearLayoutandroid: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> <LinearLayoutandroid: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> <LinearLayoutandroid: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> <LinearLayoutandroid: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> <LinearLayoutandroid: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程序设计有所帮助。