您现在的位置是:首页 > 文章详情

Android--自定义控件(图片轮播)

日期:2017-05-15点击:301
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/72329936

效果图:


方法一:原理就是利用定时任务器定时切换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; } } }




原文链接:https://yq.aliyun.com/articles/631514
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章