viewpager实现轮播图效果
2016-07-04 15:26
309 查看
比较简单实用的banner效果
}
MainActivity code
activity_main.xml布局
}
public class BannerViewPager extends ViewPager { private TextView textView; private LinearLayout linearLayout; private final int SCROLL_BORDER = 2, TIMER_UPDATE = 3; private MiniBannerViewPagerAdapter adapter; private Timer timer; public interface MiniBannerViewPagerAdapter { int bannerImageCount();//图片的总数 String bannerImageUrlAtIndex(int index);//通过index获取对象图片里的url String bannerTextAtIndex(int index); //通过index获取对象的title void bannerDidSelectAtIndex(int index); //点击把当前的对象返回进行相应的操作 } private Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case TIMER_UPDATE: { int count = adapter.bannerImageCount(); int index = getCurrentItem(); index = (index + 1) % (count + 2); setCurrentItem(index); break; } case SCROLL_BORDER: { int count = adapter.bannerImageCount(); int current = getCurrentItem(); if (current == 0) { setCurrentItem(count, false); } else if (current == count + 1) { setCurrentItem(1, false); } break; } } } }; public MiniBannerViewPager(Context context) { super(context); } public MiniBannerViewPager(Context context, AttributeSet attrs) { super(context, attrs); } public void setRootView(View view) { this.textView = (TextView) view.findViewById(R.id.banner_text); this.linearLayout = (LinearLayout) view.findViewById(R.id.banner_layout); } private void stopTimer() { if (timer != null) { timer.cancel(); timer = null; } } public void setPagerAdapter(MiniBannerViewPagerAdapter adapter) { this.stopTimer(); this.adapter = adapter; if (this.adapter != null) { ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(); super.setAdapter(viewPagerAdapter); super.setOnPageChangeListener(viewPagerAdapter); final int count = adapter.bannerImageCount(); if (count > 1) { // 设置展示的红点 linearLayout.setVisibility(VISIBLE); linearLayout.removeAllViews(); for (int i = 0; i < count; i++) { ImageView imageView = new ImageView(getContext()); imageView.setBackgroundResource(R.drawable.school_news_item_main_point_normal); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); layoutParams.leftMargin = 5; linearLayout.addView(imageView, layoutParams); } this.setCurrentItem(1); timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { handler.sendEmptyMessage(TIMER_UPDATE); } }, 5000, 5000); } else { linearLayout.setVisibility(GONE); } } } public class ViewPagerAdapter extends PagerAdapter implements OnPageChangeListener { public String urlAtIndex(int index) { return adapter.bannerImageUrlAtIndex(index); } public void onPageSelected(int var1) { int count = adapter.bannerImageCount(); if (count > 1) { handler.sendEmptyMessageDelayed(SCROLL_BORDER, 500); } int index = indexForPosition(var1); for (int i = 0; i < linearLayout.getChildCount(); i++) { ImageView imageView = (ImageView) linearLayout.getChildAt(i); if (i == index) { imageView.setBackgroundResource(R.drawable.school_news_item_main_point_pressed); } else { imageView.setBackgroundResource(R.drawable.school_news_item_main_point_normal); } } String title = adapter.bannerTextAtIndex(index); textView.setText(title); } public void onPageScrolled(int var1, float var2, int var3) { } public void onPageScrollStateChanged(int var1) { } public int getCount() { int count = 0; if (adapter != null) { count = adapter.bannerImageCount(); if (count > 1) { return count + 2; } } return count; } public Object instantiateItem(ViewGroup container, int position) { final int index = indexForPosition(position); int count = adapter.bannerImageCount(); if (count == 1) { String title = adapter.bannerTextAtIndex(index); textView.setText(title); } ImageView imageView = new ImageView(container.getContext()); imageView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); imageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { adapter.bannerDidSelectAtIndex(index); } }); Object parent = imageView.getParent(); if (parent != null && parent instanceof ViewGroup) { ((ViewGroup) parent).removeView(imageView); } container.addView(imageView); imageView.setBackgroundResource(R.mipmap.ic_launcher); return imageView; } private int indexForPosition(int position) { int index = position; if (adapter.bannerImageCount() > 1) { if (position == 0) { index = adapter.bannerImageCount() - 1; } else if (position == adapter.bannerImageCount() + 1) { index = 0; } else { index = position - 1; } } return index; } public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == (arg1); } }
}
MainActivity code
MainActivity extends Activity implements MiniBannerViewPager.MiniBannerViewPagerAdapter{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); mBannerViewPager = (MiniBannerViewPager) findViewById(R.id.banner_viewpager); mBannerLayout = (RelativeLayout) findViewById(R.id.banner_relayout_layout); mBannerViewPager.setRootView(mBannerLayout); mBannerViewPager.setPagerAdapter(this); } private void initData() { mImages = new ArrayList<Integer>(); mTitles = new ArrayList<String>(); for (int i = 0; i < 5; i++) { mImages.add(R.drawable.icon_send); mTitles.add("第" + i + 1 + "展示图片"); } } @Override public int bannerImageCount() { return mImages.size(); } @Override public String bannerImageUrlAtIndex(int index) { return mImages.get(index).toString(); } @Override public String bannerTextAtIndex(int index) { return mTitles.get(index); } @Override public void bannerDidSelectAtIndex(int index) { Toast.makeText(this, mTitles.get(index), Toast.LENGTH_LONG).show(); }
activity_main.xml布局
<RelativeLayout android:id="@+id/view_feed_banner_inner" android:layout_width="match_parent" android:layout_height="150dp"> <com.example.BannerViewPager android:id="@+id/banner_viewpager" android:layout_width="match_parent" android:layout_height="match_parent" /> <RelativeLayout android:id="@+id/banner_relayout_layout" android:layout_width="match_parent" android:layout_height="30dp" android:layout_alignParentBottom="true" android:background="#33000000" android:paddingLeft="10dp" android:paddingRight="10dp"> <TextView android:id="@+id/banner_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginRight="30dp" android:layout_toRightOf="@+id/banner_layout" android:singleLine="true" android:textColor="#ffffff" android:textSize="14sp"/> <LinearLayout android:id="@+id/banner_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:orientation="horizontal"/> </RelativeLayout> </RelativeLayout>
}
相关文章推荐
- Android App开发中ViewPager组件的入门使用教程
- jquery实现简单的banner轮播效果【实例】
- 使用ViewPager实现高仿launcher左右拖动效果
- JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
- Android App中用Handler实现ViewPager页面的自动切换
- Android应用中使用ViewPager实现类似QQ的界面切换效果
- Android中ViewPager组件的基本用法及实现图片切换的示例
- 灵活使用Android中ActionBar和ViewPager切换页面
- Android实现千变万化的ViewPager切换动画
- Android中viewPager使用指南
- Android 使用 ViewPager循环广告位的实现
- Android中ViewPager实现滑动指示条及与Fragment的配合
- 详解Android App中ViewPager使用PagerAdapter的方法
- Android viewpager中动态添加view并实现伪无限循环的方法
- Android应用中使用ViewPager和ViewPager指示器来制作Tab标签
- Android ViewPager制作新手导航页(动态加载)
- 详解Android App中创建ViewPager组件的方法
- Android App中ViewPager与Fragment结合的一些问题解决
- 实现轮转广告带底部指示的自定义ViewPager控件
- 自定义RadioButton和ViewPager实现TabHost带滑动的页卡效果