今天看到RotateAnimation的一个构造方法,final Animation rotateAnimation = new RotateAnimation(90f, 360f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f);

 

一下是官方文档的详细解释:

android.view.animation.RotateAnimation.RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)


Constructor to use when building a RotateAnimation from code

Parameters:
fromDegrees Rotation offset to apply at the start of the animation.动画开始时的角度。但是第一次点击开始动画,图片不会一开始就以90度的位置摆放,而是在开始动画的时候,才会从图片90度摆放的位置开发旋转。
toDegrees Rotation offset to apply at the end of the animation.动画结束时的角度。
pivotXType Specifies how pivotXValue should be interpreted. One of Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF, or Animation.RELATIVE_TO_PARENT.设置类型。转动的点是以屏幕左上方开始还是别的方式。RELATIVE_TO_SELF,相对自己为标准;RELATIVE_TO_PARENT,相对父组件为标准;ABSOLUTE,表示绝对位置(那么对应的值应该是具体的坐标值,比如100到300,指绝对的屏幕像素单位)。
pivotXValue The X coordinate of the point about which the object is being rotated, specified as an absolute number where 0 is the left edge. This value can either be an absolute number if pivotXType is ABSOLUTE, or a percentage (where 1.0 is 100%) otherwise.针对上面的类型具体的值。(0是左边缘,取值在0-1之间,1代表100%)
pivotYType Specifies how pivotYValue should be interpreted. One of Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF, or Animation.RELATIVE_TO_PARENT.
pivotYValue The Y coordinate of the point about which the object is being rotated, specified as an absolute number where 0 is the top edge. This value can either be an absolute number if pivotYType is ABSOLUTE, or a percentage (where 1.0 is 100%) otherwise.
rotateAnimation.setFillAfter(true);不设置它按上述描述。设置的效果是在点击停止动画时,图片会以90度的位置摆放。
rotateAnimation.setDuration(10*1000);旋转持续的时间


ListView
当视野中出现第一个Item时,Adapter中getView()方法中的convertView==null,convertView是从ListView的缓存容器中取出的。当convertView不为null时,getView()方法中我们通过set改变每个Item的内容。每次滑动我们看见的不同的Item都调用过getView()方法的。当屏幕现在展示两个Item,当出现第三个Item时,创建;当又变成展示两个Item时,缓存容器保存多余的一个View,当下一次展示三个Item时,把它取出。
我们如果要通过外部的Activity改变ListView中Item的内容,如果只需要改变少数可视的Item内容,不需要通过ListView的notifyDataSetChanged()方法,这样View会出现闪屏。我们只需要通过如下代码:
  1. int firstPosition = postsListView.getFirstVisiblePosition(); 
  2.         int visiblePosition = postsListView.getChildCount(); 
  3.         for (int i = firstPosition; i < visiblePosition + firstPosition; i++) { 
  4.             if (i == 0) {//指定了改变的具体Item,如果所有可视的Item都需要改变则不需要这个if判断 
  5.                 View view = (View) postsListView.getChildAt(firstPosition); 
  6.                 PostsTopicAdapterHolder topicHolder = (PostsTopicAdapterHolder) view.getTag(); 
  7.                 ImageButton topicFavoriteBtn = topicHolder.getTopicFavoriteBtn(); 
  8.                 if (topicModel.getIsFavor() == PostsApiConstant.TOPIC_UNFAVOR) { 
  9.                     topicFavoriteBtn.setBackgroundResource(resource.getDrawableId("mc_forum_icon28")); 
  10.                 } else { 
  11.                     topicFavoriteBtn.setBackgroundResource(resource.getDrawableId("mc_forum_icon27")); 
  12.                 } 
  13.             } 
  14.         }