您的位置:首页 > 其它

Viewpager无限轮播

2016-03-03 16:52 281 查看
public class MainActivity extends ActionBarActivity implements Runnable {

private static final String TAG = "MainActivity";

private ViewPager mBanner;

private BannerAdapter mBannerAdapter;

private ImageView[] mIndicators;

private Timer mTimer = new Timer();

private int mBannerPosition = 0;

private final int FAKE_BANNER_SIZE = 100;

private final int DEFAULT_BANNER_SIZE = 5;

private boolean mIsUserTouched = false;

private int[] mImagesSrc = {

R.mipmap.img1,

R.mipmap.img2,

R.mipmap.img3,

R.mipmap.img4,

R.mipmap.img5

};

private TimerTask mTimerTask = new TimerTask() {

@Override

public void run() {

if (!mIsUserTouched) {

mBannerPosition = (mBannerPosition + 1) % FAKE_BANNER_SIZE;

runOnUiThread(MainActivity.this);

Log.d(TAG, "tname:" + Thread.currentThread().getName());

}

}

};

private TextView tv;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

Log.d("ssssssssssssss", "tname:" + Thread.currentThread().getName());

mTimer.schedule(mTimerTask, 5000, 5000);

}

private void initView() {

tv=(TextView) findViewById(R.id.tv);

mIndicators = new ImageView[] {

(ImageView)findViewById(R.id.indicator1),

(ImageView)findViewById(R.id.indicator2),

(ImageView)findViewById(R.id.indicator3),

(ImageView)findViewById(R.id.indicator4),

(ImageView)findViewById(R.id.indicator5)

};

mBanner = (ViewPager) findViewById(R.id.banner);

mBannerAdapter = new BannerAdapter(this);

mBanner.setAdapter(mBannerAdapter);

mBanner.setOnPageChangeListener(mBannerAdapter);

mBanner.setOnTouchListener(new View.OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

int action = event.getAction();

if (action == MotionEvent.ACTION_DOWN

|| action == MotionEvent.ACTION_MOVE) {

mIsUserTouched = true;

} else if (action == MotionEvent.ACTION_UP) {

mIsUserTouched = false;

}

return false;

}

});

}

private void setIndicator(int position) {

position %= DEFAULT_BANNER_SIZE;

for(ImageView indicator : mIndicators) {

indicator.setImageResource(R.mipmap.indicator_unchecked);

}

mIndicators[position].setImageResource(R.mipmap.indicator_checked);

}

@Override

public void run() {

if (mBannerPosition == FAKE_BANNER_SIZE - 1) {

mBanner.setCurrentItem(DEFAULT_BANNER_SIZE - 1, false);

} else {

mBanner.setCurrentItem(mBannerPosition);

}

}

@Override

protected void onDestroy() {

mTimer.cancel();

super.onDestroy();

}

private class BannerAdapter extends PagerAdapter implements ViewPager.OnPageChangeListener {

private LayoutInflater mInflater;

public BannerAdapter(Context context) {

mInflater = LayoutInflater.from(context);

}

@Override

public int getCount() {

return FAKE_BANNER_SIZE;

}

@Override

public boolean isViewFromObject(View view, Object o) {

return view == o;

}

@Override

public Object instantiateItem(ViewGroup container, int position) {

position %= DEFAULT_BANNER_SIZE;

View view = mInflater.inflate(R.layout.item, container, false);

ImageView imageView = (ImageView) view.findViewById(R.id.image);

imageView.setImageResource(mImagesSrc[position]);

final int pos = position;

view.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Toast.makeText(MainActivity.this, "click banner item :" + pos, Toast.LENGTH_SHORT).show();

}

});

container.addView(view);

return view;

}

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

container.removeView((View) object);

}

@Override

public void finishUpdate(ViewGroup container) {

int position = mBanner.getCurrentItem();

Log.d(TAG, "finish update before, position=" + position);

if (position == 0) {

position = DEFAULT_BANNER_SIZE;

mBanner.setCurrentItem(position, false);

} else if (position == FAKE_BANNER_SIZE - 1) {

position = DEFAULT_BANNER_SIZE - 1;

mBanner.setCurrentItem(position, false);

}

Log.d(TAG, "finish update after, position=" + position);

}

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override

public void onPageSelected(int position) {

mBannerPosition = position;

setIndicator(position);

position %= DEFAULT_BANNER_SIZE;

int i=position+1;

tv.setText(i+"/"+mImagesSrc.length);

}

@Override

public void onPageScrollStateChanged(int state) {

}

}

//布局文件

item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#b0b0b0">

<ImageView

android:layout_width="match_parent"

android:layout_height="match_parent"

android:scaleType="centerCrop"

android:id="@+id/image" />

</LinearLayout>

activity_main.xml

<FrameLayout 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"

android:orientation="vertical"

tools:context=".MainActivity">

<android.support.v4.view.ViewPager

android:id="@+id/banner"

android:layout_width="match_parent"

android:layout_height="150dp">

</android.support.v4.view.ViewPager>

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:layout_marginTop="138dp"

android:layout_marginBottom="3dp"

android:orientation="horizontal">

<ImageView

android:id="@+id/indicator1"

android:layout_width="12dp"

android:layout_height="12dp"

android:layout_marginRight="5dp"

android:src="@mipmap/indicator_unchecked" />

<ImageView

android:id="@+id/indicator2"

android:layout_width="12dp"

android:layout_height="12dp"

android:layout_marginRight="5dp"

android:src="@mipmap/indicator_unchecked" />

<ImageView

android:id="@+id/indicator3"

android:layout_width="12dp"

android:layout_height="12dp"

android:layout_marginRight="5dp"

android:src="@mipmap/indicator_unchecked" />

<ImageView

android:id="@+id/indicator4"

android:layout_width="12dp"

android:layout_height="12dp"

android:layout_marginRight="5dp"

android:src="@mipmap/indicator_unchecked" />

<ImageView

android:id="@+id/indicator5"

android:layout_width="12dp"

android:layout_height="12dp"

android:src="@mipmap/indicator_unchecked" />

<TextView

android:id="@+id/tv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="20dp"

android:text="1111111111"

/>

</LinearLayout>

</FrameLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: