Android窗口抖动之动画实现
Android的窗口抖动,可以通过写xml动画配置文件实现,比如常见的微信摇一摇,其实就是通过Android动画的一些基本属性如translate,cycleInterpolator实现的。
现在写一个代码,实现一个基本的窗口view抖动的效果,简单期间,就以一个TextView为例,让其抖动。activity_main.xml代码文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="zhangphil.anim.MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="#e53935"
android:id="@+id/text"
android:text="窗口抖动 Zhang Phil @ CSDN" />
</RelativeLayout>
测试的activity MainActivity.java:
package zhangphil.anim;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text=(TextView) findViewById(R.id.text);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_anim) {
Animation anim = AnimationUtils.loadAnimation(MainActivity.this, R.anim.myanim);
text.startAnimation(anim);
return true;
}
return super.onOptionsItemSelected(item);
}
}
TextView所在的布局文件及测试的Activity本身可以写的很简单,复杂的地方在res/anim目录下所写的那些动画属性配置文件。
res/anim目录下的myanim.xml文件代码:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@anim/cycle" >
<translate
android:duration="300"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="-10"
android:toYDelta="-10" />
<translate
android:duration="300"
android:fromXDelta="0"
android:fromYDelta="0"
android:startOffset="300"
android:toXDelta="10"
android:toYDelta="-10" />
<translate
android:duration="300"
android:fromXDelta="0"
android:fromYDelta="0"
android:startOffset="600"
android:toXDelta="-10"
android:toYDelta="10" />
<translate
android:duration="300"
android:fromXDelta="0"
android:fromYDelta="0"
android:startOffset="900"
android:toXDelta="10"
android:toYDelta="10" />
</set>
myanim.xml代码文件需要用到的cycleInterpolator配置文件cycle.xml代码文件:
<?xml version="1.0" encoding="utf-8"?>
<cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
android:cycles="2" />
附录文章:
1,《Android动画循环弹动cycleInterpolator》链接地址:http://blog.csdn.net/zhangphil/article/details/49449935