Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android編程實現仿iphone抖動效果的方法(附源碼)

Android編程實現仿iphone抖動效果的方法(附源碼)

編輯:Android開發實例

本文實例講述了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程序設計有所幫助。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved