位移,也就是移动,可以帮助我们实现一个空间或者布局的移动效果,在动画里面可谓是应用最多的一个吧。下面我们来仔细研究一下这个动画。

实现过程依然有两个,一个是自定义anim文件。如下:

android:fromYDelta="0"

android:toYDelta="45%p"

android:fillAfter="true"

android:duration="2000">

android:fromXDelta="0"

android:fromYDelta="45%p"

android:toYDelta="45%p"

android:toXDelta="45%p"

android:fillAfter="true"

android:duration="2000">

android:fromXDelta="45%p"

android:toXDelta="0"

android:fromYDelta="45%p"

android:toYDelta="0"

android:fillAfter="true"

android:duration="2000">

以上是三种效果的动画文件,有需要的盆友们可以分别运行看看效果,属性改的多了自然也就知道每个属性分别代表什么意思了。以下给出activity中的代码,至于xml的代码,我想只要接触过的都会写,很简单,最下方会有界面图片展示。

public class TranslateAnimationDemoActivity extends Activity implements

OnClickListener, AnimationListener {

private ImageView mImageView;

private TranslateAnimation translateAnim1;

private TranslateAnimation translateAnim2;

private TranslateAnimation translateAnim3;

private int t = 1;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

findViewById(R.id.btn_translate).setOnClickListener(this);

mImageView = (ImageView) findViewById(R.id.imageview);

}

public void onClick(View v) {

startTranslateAnimationJavaCode();

// stertTranslateAnimationXml();

// android:fromXDelta="45%p" 动画的初始x位置

// android:toXDelta="0" 动画结束时x的位置

// android:fromYDelta="45%p" 动画开始时y的位置 20% 相对于自身 20%p相对于屏幕

// android:toYDelta="0" 动画结束时Y的位置

// android:fillAfter="true" 动画播放后的位置

// android:duration="2000" 动画播放时间

// 动画设置监听

// setListen();

}

private void stertTranslateAnimationXml() {

translateAnim1 = (TranslateAnimation) AnimationUtils.loadAnimation(

this, R.anim.todown);

mImageView.setAnimation(translateAnim1);

translateAnim2 = (TranslateAnimation) AnimationUtils.loadAnimation(

this, R.anim.toright);

// mImageView.setAnimation(translateAnim2);

translateAnim3 = (TranslateAnimation) AnimationUtils.loadAnimation(

this, R.anim.totop);

// mImageView.setAnimation(translateAnim3);

}

private void setListen() {

translateAnim1.setAnimationListener(this);

translateAnim2.setAnimationListener(this);

translateAnim3.setAnimationListener(this);

}

private void startTranslateAnimationJavaCode() {

// 动画移动相当于自己大小的多少 3f 代表组件的3倍宽 或 高 移动

TranslateAnimation translateAnim = new TranslateAnimation(

Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,

10f, Animation.RELATIVE_TO_SELF, 0f,

Animation.RELATIVE_TO_SELF, 10f);

translateAnim.setDuration(2000);

mImageView.setAnimation(translateAnim);

}

public void onAnimationStart(Animation animation) {

// TODO Auto-generated method stub

}

public void onAnimationEnd(Animation animation) {

if (t == 1) {

mImageView.startAnimation(translateAnim2);

t = 2;

} else if (t == 2) {

mImageView.startAnimation(translateAnim3);

t = 3;

} else if (t == 3) {

mImageView.startAnimation(translateAnim1);

t = 1;

} else {

Log.e("TranslateAnimationDemoActivity", "见鬼了");

}

}

public void onAnimationRepeat(Animation animation) {

// TODO Auto-generated method stub

}

}图片设置的有点小,还望广大博友加以理解,当时现成看到的图片就直接用了。

里面涉及几种效果,可以把注销掉的内容还原,把原来的动画效果注释掉继续运行,你会看到不一样的结果。应该这里面还涉及了动画的监听,可以监听到动画的开始,结束,以及重放。具体的在以后单独说明。有不好之处还请见谅,以后会多多修改。

0818b9ca8b590ca3270a3433284dd417.png                                            完毕!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐