android 3.0新特性--》ViewFilperAdapter

最近在做一个电子相框主要能够播放幻灯片,起初使用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() < startX) { // 向左滑动
                                      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"
     />





你可能感兴趣的:(Android)