ViewPager实现可以自动滚动的广告展示
来源:互联网 发布:什么叫绿鞋机制知乎 编辑:程序博客网 时间:2024/05/18 09:07
广告展示用 ViewPager + PagerAdapter 实现,自动滚动直接用postDelayed实现。
指示器用的是系统的RadioButton,不是很和谐,可以自己重写一个。
要注意的是:postDelayed不要重复new Runnable,不然手动滑动的时候会产生很多个runnable,会出现乱滚动。
不知道RadioGroup为什么不能这check(1),这里只能默认选择最后一个。
效果图如下:
MainActivity.java
package myviewpager.xiaopan.com.myviewpager;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.MotionEvent;import android.view.View;import android.widget.RadioButton;import android.widget.RadioGroup;import java.util.ArrayList;public class MainActivity extends AppCompatActivity { private ViewPager vpShow ; private ShowViewPagerAdapter showAdapter; private ArrayList<AdBean> arr_Ads; private RadioGroup rgCursor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); arr_Ads = new ArrayList<>(); arr_Ads.add(new AdBean("第一幅广告图",R.drawable.pic1)); arr_Ads.add(new AdBean("第二幅广告图",R.drawable.pic2)); arr_Ads.add(new AdBean("第三幅广告图",R.drawable.pic3)); initView(); } private void initView(){ vpShow = (ViewPager) findViewById(R.id.vp_show); showAdapter = new ShowViewPagerAdapter(this,arr_Ads); vpShow.setAdapter(showAdapter); rgCursor = (RadioGroup) findViewById(R.id.rg_cursor); for(int i = 0; i < arr_Ads.size(); i++){ RadioButton rb = new RadioButton(this); rb.setId(i); rb.setClickable(false); rgCursor.addView(rb); rgCursor.check(i); } vpShow.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { if(motionEvent.getAction()== MotionEvent.ACTION_DOWN){ doAutoScroll(false); }else if(motionEvent.getAction()== MotionEvent.ACTION_UP){ doAutoScroll(true); } return false; // 不能消费掉,还要响应滑动等其它事件 } }); vpShow.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {// Log.d("onPageScrolled","="+position); } @Override public void onPageSelected(final int position) { Log.d("OnPageSelected","="+position); rgCursor.check(position); doAutoScroll(true); } @Override public void onPageScrollStateChanged(int state) {// Log.d("PageScrollStateChanged","="+state); } }); doAutoScroll(true); } Runnable autoScroll = new Runnable() { @Override public void run() { int currPos = vpShow.getCurrentItem(); vpShow.setCurrentItem(currPos>=arr_Ads.size()-1?0:currPos+1); } }; private void doAutoScroll(boolean bAuto){ Log.d("doAutoScroll"," = "+bAuto); vpShow.removeCallbacks(autoScroll); if(bAuto){ vpShow.postDelayed(autoScroll,6000); } } class AdBean{ public String strTitle; public int resId; public AdBean(String strTitle, int resId){ this.strTitle = strTitle; this.resId = resId; } }}
适配器
ShowViewPagerAdapter.java
package myviewpager.xiaopan.com.myviewpager;import android.content.Context;import android.support.v4.view.PagerAdapter;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import java.util.ArrayList;/** * Created by Pansing on 2015/7/13. */public class ShowViewPagerAdapter extends PagerAdapter { private Context context; private ArrayList<MainActivity.AdBean> arr_Ads; public ShowViewPagerAdapter(Context context, ArrayList<MainActivity.AdBean> arr_Ads){ this.context = context; this.arr_Ads = arr_Ads; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View)object); } @Override public int getItemPosition(Object object) { return super.getItemPosition(object); } @Override public void notifyDataSetChanged() { super.notifyDataSetChanged(); } @Override public int getCount() { if(arr_Ads==null){ return 0; } return arr_Ads.size(); } @Override public Object instantiateItem(ViewGroup container, int position) { View view = View.inflate(context,R.layout.view_show_item,null); ImageView ivShow = (ImageView) view.findViewById(R.id.iv_show_item); TextView tvTitle = (TextView) view.findViewById(R.id.tv_title_item); ivShow.setImageResource(arr_Ads.get(position).resId); tvTitle.setText(arr_Ads.get(position).strTitle); container.addView(view); return view; } @Override public boolean isViewFromObject(View view, Object obj) { return view == obj; }}
布局文件activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/vp_show" android:layout_width="match_parent" android:layout_height="200dp"> </android.support.v4.view.ViewPager> <RadioGroup android:id="@+id/rg_cursor" android:layout_width="wrap_content" android:layout_height="20dp" android:padding="5dp" android:layout_alignBottom="@id/vp_show" android:layout_alignRight="@id/vp_show" android:orientation="horizontal"> </RadioGroup></RelativeLayout>
Item布局文件
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/iv_show_item" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitXY" /> <TextView android:id="@+id/tv_title_item" android:layout_alignParentBottom="true" android:layout_width="match_parent" android:layout_height="34dp" android:gravity="center" android:textColor="@android:color/white" android:background="#A0333333" /></RelativeLayout>
0 0
- ViewPager实现可以自动滚动的广告展示
- 使用ViewPager实现可以自动切换的广告控件
- 自动滚动的ViewPager
- 安卓开发中实现广告图片自动切换的ViewPager广告栏的自定义类(可以根据广告数自动设置导航圆形图标个数)
- android简单实现无限滚动,自动滚动的ViewPager
- ViewPager实现类似广告界面滚动效果
- Android 使用ViewPager实现广告条滚动
- [Android] 使用 ViewPager实现滚动广告
- 自动切换的viewpager,实现广告页面的持续切换
- Android广告展示ViewPager
- 实现无限自动循环的Viewpager,广告轮询页面
- Viewpager里面的图片自动滚动的简单实现
- ViewPager实现广告条自动滑动
- Android ViewPager的无限循环与自动滚动实现
- 可以循环滚动的展示图
- 实现文字的滚动展示
- iOS-利用UIScrollView实现展示图片的无限滚动及自动滚动
- 利用UIScrollView实现展示图片的无限滚动及自动滚动
- C++的运算符重载
- GIT使用总结
- Android中实现定时器的三种方法
- XUtils中Bitmap设置的图片如何平铺满
- 1.Linux网络栈下两层实现
- ViewPager实现可以自动滚动的广告展示
- Linux mysql 5.6: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
- Spring MVC拦截器配置及其原理分析
- OpenWrt的swconfig结构框架
- HTML和CSS的关键:盒子模型(Box model)
- Scala : 主构造器、私有构造器、构造器重载
- 济宁宋君豪
- SecureCRT自动断开与服务端连接的解决办法
- 撤销功能的实现——备忘录模式(Memento Pattern)