android的ViewPager实现自动播放
2016-06-15 18:17
393 查看
上次实现了
非常简单, 直接用
ViewPager的循环播放android的ViewPager实现伪循环效果, 这次来实现自动播放.
非常简单, 直接用
ScheduledExecutorService就好了.
原文
android的ViewPager实现自动播放Code
直接看代码, 看注释.package com.qefee.pj.testviewpager; import android.graphics.Color; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class MainActivity extends AppCompatActivity { /** * log tag for MainActivity */ private static final String TAG = "MainActivity"; ViewPager viewPager; String[] texts = { "hello", "world", "1", "2" }; TextView[] textViews; int currentItem; private ScheduledExecutorService executor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); int size = initSize(); initTextViews(size); initViewPager(); } @Override protected void onResume() { super.onResume(); startAutoScroll(); // activity激活时候自动播放 } @Override protected void onPause() { super.onPause(); stopAutoScroll(); // activity暂停时候停止自动播放 } private void startAutoScroll() { stopAutoScroll(); executor = Executors.newSingleThreadScheduledExecutor(); Runnable command = new Runnable() { @Override public void run() { selectNextItem(); } private void selectNextItem() { runOnUiThread(new Runnable() { @Override public void run() { viewPager.setCurrentItem(++currentItem); } }); } }; int delay = 2; int period = 2; TimeUnit timeUnit = TimeUnit.SECONDS; executor.scheduleAtFixedRate(command, delay, period, timeUnit); } private void stopAutoScroll() { if (executor != null) { executor.shutdownNow(); } } private void initViewPager() { viewPager = (ViewPager) findViewById(R.id.viewPage); viewPager.setAdapter(new PagerAdapter() { @Override public int getCount() { return Integer.MAX_VALUE; // 取一个大数字 } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { Log.i(TAG, "instantiateItem: instantiateItem + position = " + position); TextView t = textViews[position % textViews.length]; container.addView(t); return t; } @Override public void destroyItem(ViewGroup container, int position, Object object) { Log.i(TAG, "destroyItem: + position = " + position); container.removeView((View) object); } }); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { currentItem = position; startAutoScroll(); // 手动切换完成后恢复自动播放 } @Override public void onPageScrollStateChanged(int state) { } }); currentItem = texts.length * 1000000; // 取一个中间的大数字, 防止接近边界 viewPager.setCurrentItem(currentItem); } private void initTextViews(int size) { TextView[] tvs = new TextView[size]; for (int i = 0; i < tvs.length; i++) { tvs[i] = new TextView(this); tvs[i].setText(texts[i % texts.length]); int color = 0; switch (i % texts.length) { case 0: color = Color.parseColor("#aaaaaa"); break; case 1: color = Color.parseColor("#cccccc"); break; case 2: color = Color.parseColor("#777777"); break; case 3: color = Color.parseColor("#999999"); break; default: break; } tvs[i].setBackgroundColor(color); ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); tvs[i].setLayoutParams(layoutParams); textViews = tvs; } } private int initSize() { int size; if (texts.length > 3) { size = texts.length; } else { size = texts.length * 2; // 小于3个时候, 需要扩大一倍, 防止出错 } return size; } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories