可以看到,这个类的构造函数中接收一些3D旋转时所需用到的参数,比如旋转开始和结束的角度,旋转的中心点等。然后重点看下applyTransformation()方法,首先根据动画播放的时间来计算出当前旋转的角度,然后让Camera也根据动画播放的时间在Z轴进行一定的偏移,使视图有远离视角的感觉。接着调用Camera的rotateY()方法,让视图围绕Y轴进行旋转,从而产生立体旋转的效果。最后通过Matrix来确定旋转的中心点的位置。
有了这个工具类之后,我们就可以借助它非常简单地实现中轴旋转的特效了。接着创建一个图片的实体类Picture,代码如下所示:
public class Picture {
/**
* 图片名称
*/
private String name;
/**
* 图片对象的资源
*/
private int resource;
public Picture(String name, int resource) {
this.name = name;
this.resource = resource;
}
public String getName() {
return name;
}
public int getResource() {
return resource;
}
}
这个类中只有两个字段,name用于显示图片的名称,resource用于表示图片对应的资源。
然后创建图片列表的适配器PictureAdapter,用于在ListView上可以显示一组图片的名称,代码如下所示:
public class PictureAdapter extends ArrayAdapter<Picture> {
public PictureAdapter(Context context, int textViewResourceId, List<Picture> objects) {
super(context, textViewResourceId, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Picture picture = getItem(position);
View view;
if (convertView == null) {
view = LayoutInflater.from(getContext()).inflate(Android.R.layout.simple_list_item_1,
null);
} else {
view = convertView;
}
TextView text1 = (TextView) view.findViewById(android.R.id.text1);
text1.setText(picture.getName());
return view;
}
}