package cn.androidy.thinking; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.Toast; import java.util.Timer; import java.util.TimerTask; import cn.androidy.thinking.demos.ThirdParthDemo; public class BannerActivity extends DemoDetailBaseActivity implements Runnable { private String originalUrl; private ViewPager mBanner; private BannerAdapter mBannerAdapter; private ImageView[] mIndicators; private Timer mTimer = new Timer(); private TimerTask mTimerTask = new TimerTask() { @Override public void run() { if (!mIsUserTouched) { mBannerPosition = (mBannerPosition + 1) % FAKE_BANNER_SIZE; runOnUiThread(BannerActivity.this); Log.d(TAG, "tname:" + Thread.currentThread().getName()); } } }; 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 }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); originalUrl = getIntent().getStringExtra(ThirdParthDemo.KEY_ORIGINAL_URL); initView(); mTimer.schedule(mTimerTask, 5000, 3000); } private void initView() { 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() { mBanner.setCurrentItem(mBannerPosition); } 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.banner_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(BannerActivity.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); } @Override public void onPageScrollStateChanged(int state) { } } @Override protected void onDestroy() { mTimer.cancel(); super.onDestroy(); } @Override protected int getLayoutId() { return R.layout.activity_banner; } @Override protected int getFloatingActionButtonId() { return 0; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_banner, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } else if (id == android.R.id.home) { finish(); return true; } else if (id == R.id.action_original_link) { Uri uri = Uri.parse(originalUrl); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); return true; } return super.onOptionsItemSelected(item); } }