利用属性动画制做下拉显示更多的效果

之前学习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