Android 는 viewpager 를 사용 하여 자동 무한 윤파 도 를 실현 합 니 다.

1.구체 적 인 절차
     대략 실현 절 차 를 말 해 보 세 요.보통 우 리 는 두 가지 가 있 습 니 다.하 나 는 viewpager+를 커서 로 하 는 점 입 니 다.다른 하 나 는 viewpager 를 다시 쓰 는 것 이다.
       효과 그림:

1.1 레이아웃,viewpager+viewgroup 을 직접 사용 하면 됩 니 다.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  xmlns:tools="http://schemas.android.com/tools" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  tools:context="com.maxence.viewpager.MainActivity" > 
  <RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="220dp" > 
    <android.support.v4.view.ViewPager 
      android:id="@+id/vp_pager" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 
      <!--   viewgroup    add    --> 
      <LinearLayout 
        android:id="@+id/ll_container" 
        android:layout_width="match_parent" 
        android:layout_height="30dp" 
        android:gravity="center" 
        android:orientation="horizontal" 
        android:layout_alignParentBottom="true" 
        ></LinearLayout> 
  </RelativeLayout> 
</RelativeLayout> 
 1.2 동적 add 의 점,일반적인 흰색 점:pointnormal.xml。

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"  
   android:shape="oval"> 
  <stroke 
    android:width="1dip" 
    android:color="#ffffff"/> 
  <solid android:color="#ffffff" /> 
</shape> 
   붉 은 점 으로 선택:pointselect.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"  
  android:shape="oval"> 
  <stroke  
    android:width="1dp" 
    android:color="#ff0000" 
    /> 
  <solid android:color="#ff0000"/> 
</shape> 
1.그림 과 커서 를 동적 으로 추가 합 니 다.

 /** 
   *       
   */ 
  private void initData() { 
    mContext = this; 
    int[] i = new int[] { R.drawable.bg_lunbo1, R.drawable.bg_lunbo2, R.drawable.bg_lunbo3, R.drawable.bg_lunbo4 }; 
    al = new ArrayList<ImageView>(); 
    for (int x = 0; x < i.length; x++) { 
      ImageView iv = new ImageView(mContext); 
      iv.setBackgroundResource(i[x]); 
      al.add(iv); 
      View v=new View(mContext); 
      v.setBackgroundResource(R.drawable.point_normal); 
      //            
      LayoutParams layoutParams = new LinearLayout.LayoutParams(15, 15);  
            layoutParams.leftMargin = 30;  
      ll_container.addView(v,layoutParams); 
    } 
    vp_pager.setAdapter(new Myadapter()); 
    vp_pager.setOnPageChangeListener(this); 
    vp_pager.setCurrentItem(al.size()*1000); //           
    ll_container.getChildAt(0).setBackgroundResource(R.drawable.point_select); 
    prePosition=0; 
  } 
1.4 viewpgaer 는 Pager Adapter 를 연결 하면 사진 이 미 끄 러 지고 무한 미 끄 러 집 니 다.

class Myadapter extends PagerAdapter { 
    @Override 
    public int getCount() { 
      return Integer.MAX_VALUE; //       
    } 
    @Override 
    public boolean isViewFromObject(View arg0, Object arg1) { 
      return arg0 == arg1; 
    } 
    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
        int position1=position % al.size();    
        ImageView imageView = al.get(position1); 
        container.addView(imageView); 
        return imageView; 
    } 
    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
      container.removeView((View)object); 
    } 
  } 
1.5 커서 를 실현 하 는 것 은 바로 그림 을 미 끄 러 뜨리 는 것 이 고 아래 의 붉 은 점도 이에 따라 변화 한다.

vp_pager.setOnPageChangeListener(this); 

@Override 
public void onPageScrollStateChanged(int arg0) { 
} 
@Override 
public void onPageScrolled(int arg0, float arg1, int arg2) { 
} 
@Override 
public void onPageSelected(int position) { 
   int newPosition = position % al.size();  
   ll_container.getChildAt(newPosition).setBackgroundResource(R.drawable.point_select); 
   ll_container.getChildAt(prePosition).setBackgroundResource(R.drawable.point_normal); 
   prePosition=newPosition; 
} 
1.6 자동 폴 링 실현.하나의 스 레 드 를 열 면 됩 니 다.

/** 
   *      
   */ 
  private void pollint() { 
   pThread = new PollThread(); 
   pThread.start(); 
  } 
class PollThread extends Thread{ 
    @Override 
    public void run() { 
      while (poll){          
                try { 
          Thread.sleep(2000); 
        } catch (InterruptedException e) { 
          e.printStackTrace(); 
        } 
4.567914.이렇게 하면 해결 되 고 하나의 방향 만 제공 합 니 다.자신 이 확장 할 수 있 습 니 다.예 를 들 어 viewpager 를 다시 쓰 고 기능 을 내부 에 밀봉 하면 됩 니 다.
총결산
위 에서 말 한 것 은 소 편 이 소개 한 안 드 로 이 드 가 viewpager 를 사용 하여 자동 무한 윤방송 도 를 실현 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기