最近在做一个电子相框主要能够播放幻灯片,起初使用ViewPager但是很难让其自动循环播放幻灯片,之后使用ViewFliper虽然能够实现自动播放幻灯片,使用软引用解决内存溢出的问题,但是他的效率很低,不能实现循环复用View,要特高效率还是得循环复用,android3.0新特性里边就有这样成型的api、ViewFilperAdapter,个人觉得非常要用,AdapterViewFlipper 和BaseAdapter一起使用就解决了循环复用,滑到那一页在加载那一页的数据,真正的动态加载数据。
ObjectAnimator rInAnim, rOutAnim, rightIn, rightOut, leftIn, leftOut;//3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中又引入了一 个新
的动画系统:property animation,这三种动画模式在SDK中被称为property animation,view animation,drawable animation
AdapterViewFlipper iv=(AdapterViewFlipper ) findViewById(R.id.viewpager);
ViewFilperAdapter adapter = new ViewFilperAdapter(Single.getInstance().getPathList());
iv.setAdapter(adapter);
public void setViewFlipperAnim() {
if (iv.isFlipping()) {
iv.stopFlipping();
}
iv.setInAnimation(this, android.R.animator.fade_in);//加入ObjectAnimator
iv.setOutAnimation(this, android.R.animator.fade_out);
iv.setAutoStart(true); // 设置自动播放功能(点击事件,前自动播放)
iv.setFlipInterval(3000);//设置动画时间间隔3000毫秒
if (iv.isAutoStart() && !iv.isFlipping()) {
iv.startFlipping();
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
iv.stopFlipping();
iv.setAutoStart(false);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
return true;
case MotionEvent.ACTION_UP:
if (event.getX() > startX) { // 向右滑动
if (event.getX() - startX > 20) {
rInAnim = ObjectAnimator.ofFloat(iv, "x", iv.getX(), iv.getWidth());
rInAnim.setDuration(200);
iv.setInAnimation(rInAnim);
iv.setOutAnimation(rInAnim);
iv.showNext();
return false;
}
} else if (event.getX()
if (startX - event.getX() > 20) {
rOutAnim = ObjectAnimator.ofFloat(iv, "x", iv.getX(), -iv.getWidth());
rOutAnim.setDuration(200);
iv.setInAnimation(rOutAnim);
iv.setOutAnimation(rOutAnim);
iv.showPrevious();
return false;
}
}
break;
}
return super.onTouchEvent(event);
}
class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.what) {
case 0:
adapter.notifyDataSetChanged();
break;
}
}
class ViewFilperAdapter extends BaseAdapter {
private ArrayList imgpaths;
public ViewFilperAdapter(ArrayList imgpaths) {
// TODO Auto-generated constructor stub
this.imgpaths = imgpaths;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return imgpaths.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return imgpaths.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
Holder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(MainGallery.this).inflate(
R.layout.gridview_item, null);
holder = new Holder();
holder.img = (ImageView) convertView
.findViewById(R.id.gridview_item_img);
holder.head = (ImageView) convertView.findViewById(R.id.user_img);
holder.user_name = (TextView) convertView.findViewById(R.id.user_name);
holder.creat_time = (TextView) convertView.findViewById(R.id.creat_time);
holder.caption = (TextView) convertView.findViewById(R.id.caption);
holder.location = (TextView) convertView.findViewById(R.id.location);
holder.comment_list = (ListView) convertView.findViewById(R.id.comment_list);
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
String[] as = imgpaths.get(position).split("/");
Img img = dbOpenHelper.getImg(as[as.length - 1]);
if (null != img&&settingSharePreferences.getComment()) {
String userHead = dbOpenHelper.getHeadImg(img.getImg_from_id());
holder.head.setImageBitmap(ImageUtil.getImageFromLocal(ImageUtil
.getCacheImgPath().concat(
"head/" + ImageUtil.md5(userHead))));
holder.user_name.setText(img.getImg_from_name());
java.util.Date dt = new Date();
int date = (int) (dt.getTime() / 1000 - img.getImg_time());
holder.creat_time.setText(getTime(date));
holder.caption.setText(img.getCaption_text());
ArrayList comments = dbOpenHelper.getComments(img
.getImg_id());
if (comments.size() != 0) {
holder.comment_list.setAdapter(new CommentAdapter(
MainGallery.this, comments));
}
}
Img imgs=ImgCache.getInstance().getBitmap(imgpaths.get(position), MainGallery.this);
holder.img.setImageBitmap(imgs.getImgBitmap());
return convertView;
}
}
class Holder {
ImageView img, head;
TextView user_name, creat_time, caption, location;
ListView comment_list;
}
anim_left_in.xml
android:duration="500"
android:propertyName="X"
android:valueFrom="1024"
android:valueTo="0"
android:valueType="floatType" />
anim_left_out.xml
android:duration="500"
android:propertyName="X"
android:valueFrom="0"
android:valueTo="-1024"
android:valueType="floatType"
/>
anim_right_in.xml
android:duration="500"
android:propertyName="X"
android:valueFrom="0"
android:valueTo="1024"
android:valueType="floatType"
/>
anim_right_out.xml
android:duration="500"
android:propertyName="X"
android:valueFrom="0"
android:valueTo="1024"
android:valueType="floatType"
/>