之前学习Android制做不少界面的效果都感到很吃力,特别是搞不明白它们的实现方法的时候简直就无法下手,后来看的东西多了,发现不少的效果均可以用不少方法去实现,只是不一样的方法的实现难易程度和性能上有不一样而已。之前的不少View的动画效果都是用补间动画来实现的,但后来看到不少人用属性动画来实现不少的动画效果后,本身也去看了属性动画的使用后,发现使用起来更方便了,下面作了一个下拉显示更多的效果来简单说下属性动画 的用法,更多的用法已有更多的人已写了更好的文章,这里只是以实际出发说说它在实际开发中的实际用途而已。先看看效果图android
如上面的效果,有一个向下的箭头显示更多,点击显示更多,并有个动画慢慢下拉,点击向上的箭头再上拉回原来的状态。因为是工做中的项目,而且布局的代码比较多,这里就不贴布局代码了,只是说明一下:上面的部分和平时怎样写就怎样写,中间的服务区域和工做经验是先显示一行,按下拉显示更多再进行彻底显示的,全部可将它们的高都设为包裹内容,而且设置android:singleLine="true"只显示一行,当点击下拉时再进行多行显示,因为全个页面的布局是用LinearLayout,因此再下拉后下面的服务项目就会被挤出屏幕。app
而上拉和上拉的关键代码以下:ide
xiala.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ViewWrapper wrapper = new ViewWrapper(layout);
experenceTextView.setSingleLine(false);
areaTextView.setSingleLine(false);
ObjectAnimator objectAnimator = ObjectAnimator.ofInt(wrapper, "height",windowHeight-bottomPx);
objectAnimator.setCurrentPlayTime(2000);
objectAnimator.start();
xiala.setVisibility(View.GONE);
shangla.setVisibility(View.VISIBLE);
}
});
//下拉时设置wrapper这个View的高度设为windowHeight-bottomPx,这里就是放置上面所说的两个TextVeiw的父容器LinearLayout,这个ViewWrapper主要是让程序掉用其get和set方法,属性动画改变View的属性也是通用调用其get和set方法实现的,只是在这个过程当中进行一个动画过分的过程而已。 windowHeight里手机屏幕的高,bottomPx是下面按钮和这个Layout上面部分的高度,只是充满其他的空间。
shangla.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ViewWrapper wrapper = new ViewWrapper(layout);
experenceTextView.setSingleLine(true);
areaTextView.setSingleLine(true);
ObjectAnimator objectAnimator = ObjectAnimator.ofInt(wrapper, "height",oldHeight);
objectAnimator.setCurrentPlayTime(2000);
objectAnimator.start();
xiala.setVisibility(View.VISIBLE);
shangla.setVisibility(View.GONE);
}
});
布局
//上拉时只要将View的高度变为原来的高度便可,最后那两个TextView是否为singleline也是在这两个按钮的点击监听事件里处理。性能
private static class ViewWrapper {
private View mTarget;
public ViewWrapper(View target) {
mTarget = target;
}
public int getHeight() {
oldHeight = mTarget.getLayoutParams().height;
return mTarget.getLayoutParams().height;
}
public void setHeight(int width) {
mTarget.getLayoutParams().height = width;
mTarget.requestLayout();
}
}
学习
只要会了日常的布局后,对它们用上动画也是很简单的事,只是在对它们作位置和大小的变化时,想一想它以如今这样的布局代码,改变后会不会对原有的效果形成影响就OK了,就如上面的效果,若是将两个TextView或其父容器设置的高度是定值,那么动画就不能达到想要的效果。若是是要改变其它的,看看它们有没get和set方法,若是没有,能够本身写相应的get和set方法就能够了。动画
好了关于这个用法就说到这了,因为是新人,写写博客记录下本身赶上的小问题和解决过程,有什么疑问和有问题的地方,欢迎指教,下一篇会给你们介绍用属性动画实现viewpager改变页面的时候,带有指示条的动画效果。spa