欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android仿淘寶詳情頁(yè)面viewPager滑動(dòng)到最后一張圖片跳轉(zhuǎn)的功能

 更新時(shí)間:2017年03月27日 13:54:26   作者:番茄醬wk  
需要做一個(gè)仿淘寶客戶(hù)端ViewPager滑動(dòng)到最后一頁(yè),再拖動(dòng)的時(shí)候跳到詳情的功能,剛開(kāi)始我也迷糊了,通過(guò)查閱相關(guān)資料發(fā)現(xiàn)有好多種實(shí)現(xiàn)方法,下面小編給大家分享實(shí)例代碼,感興趣的朋友一起看看吧

需要做一個(gè)仿淘寶客戶(hù)端ViewPager滑動(dòng)到最后一頁(yè),再拖動(dòng)的時(shí)候跳到詳情的功能,剛開(kāi)始沒(méi)什么思路,后來(lái)搜了一下,發(fā)現(xiàn)有好幾種實(shí)現(xiàn)方法,最好的一種就是在ViewPager圖片的后面再加一個(gè)view,然后滑動(dòng)viewpager的時(shí)候,判斷一下就行了。
附一個(gè)鏈接,我寫(xiě)的代碼就是參考的這個(gè),稍微改了一點(diǎn)點(diǎn),先看看效果圖。

實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單,先寫(xiě)一個(gè)滑動(dòng)加載詳情的布局,然后在viewpager的instantiateItem里面判斷一下,如果是最后一張,就顯示加載詳情的那個(gè)布局。不過(guò)需要注意的是,viewpager的getCount()返回的是list.size()+1,因?yàn)槎嗔艘粋€(gè)布局。
下面看看代碼里面的幾個(gè)方法。

在PagerAdapter的instantiateItem里面加載布局,判斷一下position,如果小于圖片數(shù)組,就是圖片布局,如果大于了數(shù)組的長(zhǎng)度(為什么會(huì)大于,因?yàn)榍懊嬉呀?jīng)說(shuō)了,getCount返回的+1了的),就返回那個(gè)滑動(dòng)跳轉(zhuǎn)的布局。

@Override 
public Object instantiateItem(ViewGroup container, int position) { 
 if (position < images.length) { 
  ImageView imageView = new ImageView(MainActivity.this); 
  ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dip2px(300)); 
  imageView.setLayoutParams(lp); 
  imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
  imageView.setImageResource(images[position]); 
  container.addView(imageView); 
  return imageView; 
 } else { 
  View hintView = LayoutInflater.from(container.getContext()).inflate(R.layout.more_view, container, false); 
  slideText = (TextView) hintView.findViewById(R.id.tv); 
  arrowImage = (ImageView) hintView.findViewById(R.id.iv); 
  container.addView(hintView); 
  return hintView; 
 } 
} 

 只要這樣寫(xiě)了,就可以看到一個(gè)大概的效果了,然后主要就是viewp的OnPageChangeListener里面的東西了。主要思路就是,當(dāng)在最后一張圖片時(shí),只要再次往左滑動(dòng),滑動(dòng)到一定距離,就觸發(fā)跳轉(zhuǎn)的事件,然后,只要是在最后一張圖片,是在向左滑動(dòng),松開(kāi)手時(shí),都要讓viewpager選中最后一張圖片那里,不能是滑動(dòng)到了新加的那個(gè)布局去了。

在看看ViewPager.OnPageChangeListener具體的代碼是怎么樣的。

public class ViewPagerOnPageChangeListener implements ViewPager.OnPageChangeListener { 
  int currPosition = 0; // 當(dāng)前滑動(dòng)到了哪一頁(yè) 
  boolean canJump = false; 
  boolean canLeft = true; 
  boolean isObjAnmatitor = true; 
  boolean isObjAnmatitor2 = false; 
  @Override 
  public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
   if (position == (images.length-1)) { 
    if (positionOffset > 0.35) { 
     canJump = true; 
     if (imageAdapter.arrowImage != null && imageAdapter.slideText != null) { 
      if (isObjAnmatitor) { 
       isObjAnmatitor = false; 
       ObjectAnimator animator = ObjectAnimator.ofFloat(imageAdapter.arrowImage, "rotation", 0f, 180f); 
       animator.addListener(new AnimatorListenerAdapter() { 
        @Override 
        public void onAnimationEnd(Animator animation) { 
         super.onAnimationEnd(animation); 
         imageAdapter.slideText.setText("松開(kāi)跳到詳情"); 
         isObjAnmatitor2 = true; 
        } 
       }); 
       animator.setDuration(500).start(); 
      } 
     } 
    } else if (positionOffset <= 0.35 && positionOffset > 0) { 
     canJump = false; 
     if (imageAdapter.arrowImage != null && imageAdapter.slideText != null) { 
      if (isObjAnmatitor2) { 
       isObjAnmatitor2 = false; 
       ObjectAnimator animator = ObjectAnimator.ofFloat(imageAdapter.arrowImage, "rotation", 180f, 360f); 
       animator.addListener(new AnimatorListenerAdapter() { 
        @Override 
        public void onAnimationEnd(Animator animation) { 
         super.onAnimationEnd(animation); 
         imageAdapter.slideText.setText("繼續(xù)滑動(dòng)跳到詳情"); 
         isObjAnmatitor = true; 
        } 
       }); 
       animator.setDuration(500).start(); 
      } 
     } 
    } 
    canLeft = false; 
   } else { 
    canLeft = true; 
   } 
  } 
  @Override 
  public void onPageSelected(int position) { 
   currPosition = position; 
  } 
  @Override 
  public void onPageScrollStateChanged(int state) { 
   if (currPosition == (images.length-1) && !canLeft) { 
    if (state == ViewPager.SCROLL_STATE_SETTLING) { 
     if (canJump) { 
      Toast.makeText(MainActivity.this, "跳轉(zhuǎn)啦", Toast.LENGTH_SHORT).show(); 
     } 
     new Handler().post(new Runnable() { 
      @Override 
      public void run() { 
       // 在handler里調(diào)用setCurrentItem才有效 
       viewPager.setCurrentItem(images.length-1); 
      } 
     }); 
    } 
   } 
  } 
 } 

 邏輯不算復(fù)雜,主要是OnPageChangeListener里面三個(gè)方法加的一些判斷。

看到參考的那篇文章里面評(píng)論很多人在要源碼,我在這里把我寫(xiě)的分享一下,歡迎大家指導(dǎo)。源碼下載

另外還有一個(gè)比較好的viewpager效果就是,同時(shí)顯示三個(gè)item,然后滑動(dòng)到最后一個(gè)圖片時(shí),讓那個(gè)向左滑的小箭頭露出了,讓用戶(hù)知道這個(gè)viewpager還可以繼續(xù)滑動(dòng),體驗(yàn)稍微好一點(diǎn)。

這個(gè)效果實(shí)現(xiàn)起來(lái)也非常簡(jiǎn)單,只需要設(shè)置viewpager的marginRight和marginLeft,然后給viewpager和它的父控件加上Android:clipChildren="false"就行了。

以上所述是小編給大家介紹的Android仿淘寶詳情頁(yè)面viewPager滑動(dòng)到最后一張圖片跳轉(zhuǎn)的功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論