效果图:
方法一:原理就是利用定时任务器定时切换ViewPager的页面
import java.util.ArrayList; import android.os.Bundle; import android.app.Activity; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.TextView; public class MainActivity extends Activity { private ViewPager viewPager; private TextView tv_intro; private LinearLayout dot_layout; private ArrayList<Ad> list = new ArrayList<Ad>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initView(); initListener(); initData(); } private void initView() { setContentView(R.layout.activity_main); viewPager = (ViewPager) findViewById(R.id.viewPager); tv_intro = (TextView) findViewById(R.id.tv_intro); dot_layout = (LinearLayout) findViewById(R.id.dot_layout); } private void initListener() { viewPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int position) { Log.e("Activity", "position: "+position); updateIntroAndDot(); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageScrollStateChanged(int state) { } }); } private void initData() { list.add(new Ad(R.drawable.a, "巩俐不低俗,我就不能低俗")); list.add(new Ad(R.drawable.b, "朴树又回来了,再唱经典老歌引百万人同唱啊")); list.add(new Ad(R.drawable.c, "揭秘北京电影如何升级")); list.add(new Ad(R.drawable.d, "乐视网TV版大放送")); list.add(new Ad(R.drawable.e, "热血屌丝的反杀")); initDots(); viewPager.setAdapter(new MyPagerAdapter()); updateIntroAndDot(); } /** * 初始化dot */ private void initDots(){ for (int i = 0; i < list.size(); i++) { View view = new View(this); LayoutParams params = new LayoutParams(8, 8); if(i!=0){ params.leftMargin = 5; } view.setLayoutParams(params); view.setBackgroundResource(R.drawable.selector_dot); dot_layout.addView(view); } } /** * 更新文本 */ private void updateIntroAndDot(){ int currentPage = viewPager.getCurrentItem()%list.size(); tv_intro.setText(list.get(currentPage).getIntro()); for (int i = 0; i < dot_layout.getChildCount(); i++) { dot_layout.getChildAt(i).setEnabled(i==currentPage); } } class MyPagerAdapter extends PagerAdapter{ /** * 返回多少page */ @Override public int getCount() { return 100; } /** * true: 表示不去创建,使用缓存 false:去重新创建 * view: 当前滑动的view * object:将要进入的新创建的view,由instantiateItem方法创建 */ @Override public boolean isViewFromObject(View view, Object object) { return view==object; } /** * 类似于BaseAdapger的getView方法 * 用了将数据设置给view * 由于它最多就3个界面,不需要viewHolder */ @Override public Object instantiateItem(ViewGroup container, int position) { View view = View.inflate(MainActivity.this, R.layout.adapter_ad, null); ImageView imageView = (ImageView) view.findViewById(R.id.image); Ad ad = list.get(position%list.size()); imageView.setImageResource(ad.getIconResId()); container.addView(view);//一定不能少,将view加入到viewPager中 return view; } /** * 销毁page * position: 当前需要消耗第几个page * object:当前需要消耗的page */ @Override public void destroyItem(ViewGroup container, int position, Object object) { // super.destroyItem(container, position, object); container.removeView((View) object); } } }方法二:使用开源框架RollViewPager,下载地址:https://github.com/Jude95/RollViewPager
1、在gradle中导入包
compile 'com.jude:rollviewpager:1.2.9'
2、设置播放时间间隔、透明度、指示器(指示器可以是默认原点,数字,也可以自定义图片。
3、设置适配器,本demo中是StaticPagerAdapter,这个比较简单,用的比较多,有其他需要的可以看github源码。
import android.graphics.Color; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.jude.rollviewpager.RollPagerView; import com.jude.rollviewpager.adapter.StaticPagerAdapter; import com.jude.rollviewpager.hintview.ColorPointHintView; public class MainActivity extends AppCompatActivity { private RollPagerView mRollViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRollViewPager = (RollPagerView) findViewById(R.id.roll_view_pager); //设置播放时间间隔 mRollViewPager.setPlayDelay(1000); //设置透明度 mRollViewPager.setAnimationDurtion(500); //设置适配器 mRollViewPager.setAdapter(new TestNormalAdapter()); //设置指示器(顺序依次) //自定义指示器图片 //设置圆点指示器颜色 //设置文字指示器 //隐藏指示器 //mRollViewPager.setHintView(new IconHintView(this, R.drawable.point_focus, R.drawable.point_normal)); mRollViewPager.setHintView(new ColorPointHintView(this, Color.YELLOW,Color.WHITE)); //mRollViewPager.setHintView(new TextHintView(this)); //mRollViewPager.setHintView(null); } private class TestNormalAdapter extends StaticPagerAdapter { private int[] imgs = { R.drawable.img1, R.drawable.img2, R.drawable.img3, R.drawable.img4, }; @Override public View getView(ViewGroup container, int position) { ImageView view = new ImageView(container.getContext()); view.setImageResource(imgs[position]); view.setScaleType(ImageView.ScaleType.CENTER_CROP); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); return view; } @Override public int getCount() { return imgs.length; } } }
作者:chaoyu168 发表于2017/5/16 19:50:39 原文链接
阅读:29 评论:0 查看评论