ShakeDemo\res\layout\main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/bg" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/bg" android:orientation="vertical" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:layout_centerHorizontal="true" android:text="@string/mShake" android:textSize="20sp" android:textStyle="bold" android:textColor="#000000" /> <EditText android:id="@+id/passWd" android:layout_marginTop="20dip" android:layout_width="200dip" android:layout_height="wrap_content" android:layout_below="@+id/text" android:layout_centerHorizontal="true" android:clickable="true" android:singleLine="true" /> <Button android:id="@+id/shake_x" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/passWd" android:text="X轴抖动" /> <Button android:id="@+id/shake_y" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/shake_x" android:layout_alignBottom="@+id/shake_x" android:layout_alignParentRight="true" android:text="Y轴抖动" /> <Button android:id="@+id/shake" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/shake_x" android:layout_alignBottom="@+id/shake_x" android:layout_centerHorizontal="true" android:text="仿苹果抖动" /> <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/shake" android:layout_below="@+id/shake" android:layout_marginTop="23dp" android:src="@drawable/icon" /> </RelativeLayout>
ShakeDemo\src\com\shake\ShakeDemoActivity.java
// 仿苹果抖动效果 shake.setOnClickListener(new OnClickListener() { public void onClick(View v) { Animation shake = AnimationUtils.loadAnimation( ShakeDemoActivity.this, R.anim.anim); shake.reset(); shake.setFillAfter(true); // 图片控件 image.startAnimation(shake); } }); // X轴抖动 shake_x.setOnClickListener(new OnClickListener() { public void onClick(View v) { Animation shakeAnim = AnimationUtils.loadAnimation(ShakeDemoActivity.this, R.anim.shake_x); passWd.startAnimation(shakeAnim); } }); // Y轴抖动 shake_y.setOnClickListener(new OnClickListener() { public void onClick(View v) { Animation shakeAnim = AnimationUtils.loadAnimation(ShakeDemoActivity.this, R.anim.shake_y); passWd.startAnimation(shakeAnim); } });
ShakeDemo\res\anim\anim.xml
<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="180" android:fromDegrees="-2" android:pivotX="100%" android:pivotY="100%" android:repeatCount="infinite" android:repeatMode="reverse" android:toDegrees="2" />
ShakeDemo\res\anim\cycle.xml
<?xml version="1.0" encoding="utf-8"?> <cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android" android:cycles="20" />
ShakeDemo\res\anim\shake_x.xml
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="0" android:toXDelta="10" android:duration="1000" android:interpolator="@anim/cycle" />
ShakeDemo\res\anim\shake_y.xml
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="1000" android:fromYDelta="0" android:interpolator="@anim/cycle" android:toYDelta="10" > </translate>
DEMO完整下载路径 http://download.csdn.net/detail/androidsj/5434921