`

ViewPager仿淘宝广告栏

阅读更多

MyViewPager.class

 

public class MyViewPager extends ViewPager {
	public MyViewPager(Context context, AttributeSet attrs) {
		super(context, attrs);
		setMyScroller();
	}
	/**
	 */
	private void setMyScroller() {
		try {
			Class<?> viewpager = ViewPager.class;
			Field scroller = viewpager.getDeclaredField("mScroller");
			scroller.setAccessible(true);
			scroller.set(this, new MyScroller(getContext()));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

class MyScroller extends Scroller {
	public MyScroller(Context context) {
		super(context, new DecelerateInterpolator());
	}
	
	@Override
	public void startScroll(int startX, int startY, int dx, int dy, int duration) {
		super.startScroll(startX, startY, dx, dy, 600);
	}
}

WelcomeActivity.class

 

 

    public class WelcomeActivity extends Activity {
	private MyViewPager mViewPager;
	private List<ImageView> imageViews;
	private List<View> adViews;
	private ImageView[] mPageDotArray = new ImageView[5];
	private int[] ids4PageDot = new int[5];
	private View view1, view2, view3, view4, view5;
	private static int PHOTO_CHANGE_TIME = 2000;// 广告滚动时间间隔
	private Runnable runnable;
	private PagerAdapter mPagerAdapter;
	private Handler mHandler;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		initLayout();
		initData();
		initLinstener();
		mViewPager.setAdapter(mPagerAdapter);
		mViewPager.setOnPageChangeListener(new MyOnPageChangeListener());
		mViewPager.setOnTouchListener(new MyOnTouchListener());
		mViewPager.setCurrentItem(adViews.size() * 50 - 1);

	}

	@Override
	public void onStart() {

		mHandler.post(runnable);
		super.onStart();
	}

	@Override
	public void initLayout() {
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_welcome);
		super.initLayout();
	}

	@Override
	public void initData() {
		ids4PageDot = new int[] { R.id.page1, R.id.page2, R.id.page3, R.id.page4,
				R.id.page5 };
		initView(mPageDotArray, ids4PageDot);
		LayoutInflater mLi = LayoutInflater.from(this);
		view1 = mLi.inflate(R.layout.adview1, null, false);
		view2 = mLi.inflate(R.layout.adview2, null, false);
		view3 = mLi.inflate(R.layout.adview3, null, false);
		view4 = mLi.inflate(R.layout.adview4, null, false);
		view5 = mLi.inflate(R.layout.adview5, null, false);
		adViews = Arrays.asList(view1, view2, view3, view4, view5);
		imageViews = Arrays.asList(mPageDotArray);
		mHandler = new Handler();
		mViewPager = (MyViewPager) findViewById(R.id.viewpager);
		runnable = new MyRunnable();
		mPagerAdapter = new MyPageAdapter();
	}

	@Override
	public void initLinstener() {
		
	}

	/**
	 * 离开该界面时停止线程反复调用
	 */
	@Override
	protected void onPause() {
		mHandler.removeCallbacks(runnable);
		super.onPause();
	}

	class MyRunnable implements Runnable {
		int a = 0;

		@Override
		public void run() {
			int index = mViewPager.getCurrentItem();
			mViewPager.setCurrentItem(index + 1);
			mHandler.postDelayed(runnable, PHOTO_CHANGE_TIME);
		}
	}

	class MyPageAdapter extends PagerAdapter {
		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0 == arg1;
		}

		@Override
		public int getCount() {
			return Integer.MAX_VALUE;
		}

		@Override
		public void destroyItem(View container, int position, Object object) {
			((MyViewPager) container).removeView(adViews.get(position % adViews.size()));

		}

		@Override
		public Object instantiateItem(View container, int position) {
			((MyViewPager) container).addView(adViews.get(position % adViews.size()));
			return adViews.get(position % adViews.size());

		}
	}

	class MyOnPageChangeListener implements OnPageChangeListener {
		// 三种状态SCROLL_STATE_DRAGGING,托动状态,值为1;
		// SCROLL_STATE_IDLE,空闲状态,值为0
		// SCROLL_STATE_SETTLING,稳定状态,值为2
		@Override
		public void onPageScrollStateChanged(int state) {

		}

		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {
		}

		@Override
		public void onPageSelected(int arg0) {
			for (ImageView iv : imageViews) {
				iv.setImageDrawable(getResources().getDrawable(R.drawable.pagerdot));
			}

			imageViews.get(arg0 % adViews.size()).setImageDrawable(
					getResources().getDrawable(R.drawable.pagerdot_current));
		}

	}

	class MyOnTouchListener implements OnTouchListener {
		@Override
		public boolean onTouch(View v, MotionEvent event) {
			switch (event.getAction()) {
			case KeyEvent.ACTION_UP: {
				mHandler.postDelayed(runnable, PHOTO_CHANGE_TIME);
				break;
			}
			case KeyEvent.ACTION_DOWN: {
				mHandler.removeCallbacks(runnable);
				break;
			}
			}
			return false;
		}
	}

}

xml

 

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="142"
        android:background="#f2f2f2"
        android:orientation="horizontal" >

        <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="279" >

            <com.ccy.ui.MyViewPager
                android:id="@+id/viewpager"
                style="@style/fillParent" >

                <android.support.v4.view.PagerTitleStrip
                    android:id="@+id/pagertitle"
                    android:layout_width="wrap_content"
                    android:layout_height="0dp"
                    android:layout_gravity="bottom"
                    android:background="#0000"
                    android:textColor="#ffff" />
            </com.ccy.ui.MyViewPager>

            <ImageView
                android:id="@+id/page5"
		android:layout_alignParentRight="true"
                android:layout_alignParentBottom="ture"
	        android:layout_marginBottom="10dp"
	        android:layout_marginRight="6dp"
                android:scaleType="matrix"
                android:background="@drawable/pagerdot"
                android:contentDescription="@string/ad1" />

            <ImageView
                android:id="@+id/page4"
                 android:layout_alignParentBottom="ture"
	        android:layout_marginBottom="10dp"
	        android:layout_marginRight="6dp"
                android:scaleType="matrix"
                android:layout_toLeftOf="@id/page5"
                android:background="@drawable/pagerdot"
                android:contentDescription="@string/ad1" />

            <ImageView
                android:id="@+id/page3"
                android:layout_alignParentBottom="ture"
	        android:layout_marginBottom="10dp"
	        android:layout_marginRight="6dp"
                android:scaleType="matrix"
                android:layout_toLeftOf="@id/page4"
                android:background="@drawable/pagerdot"
                android:contentDescription="@string/ad1" />

            <ImageView
                android:id="@+id/page2"
                android:layout_alignParentBottom="ture"
	        android:layout_marginBottom="10dp"
	        android:layout_marginRight="6dp"
                android:scaleType="matrix"
                android:layout_toLeftOf="@id/page3"
                android:background="@drawable/pagerdot"
                android:contentDescription="@string/ad1" />

            <ImageView
                android:id="@+id/page1"
                android:layout_alignParentBottom="ture"
	        android:layout_marginBottom="10dp"
	        android:layout_marginRight="6dp"
                android:scaleType="matrix"
                android:layout_toLeftOf="@id/page2"
                android:background="@drawable/pagerdot_current"
                android:contentDescription="@string/ad1" />
        </RelativeLayout>
    </LinearLayout>



 

这样就可以,随考随用了!效果图稍后奉上


 

 

分享到:
评论

相关推荐

    ViewPager实现广告栏

    要实现“ViewPager实现图片的切换(仿广告栏)”,我们需要以下步骤: 1. **设置布局**: 在XML布局文件中添加ViewPager,并为其指定一个适配器。适配器将为ViewPager提供数据,这里的数据通常是待展示的图片集合...

    ViewPager仿淘宝滑动打开详情页面

    本项目“ViewPager仿淘宝滑动打开详情页面”旨在模仿淘宝App中的商品详情页展开效果,通过滑动ViewPager来展示更多的商品信息。这种效果增加了用户交互性,使应用更具吸引力。 首先,我们要理解ViewPager的基本用法...

    Android - ViewPager滑动广告栏源码

    在Android开发中,ViewPager是一个非常重要的组件,常用于实现页面滑动效果,比如常见的应用启动页、图片轮播、广告栏等。本源码提供的就是一个使用ViewPager实现的滑动广告栏,具有自动切换和自动适配功能,可以...

    fragment+viewpager 仿qq界面

    在Android应用开发中,"fragment+viewpager 仿qq界面"是一个常见的需求,它涉及到对Android UI组件的深入理解和巧妙组合。在这个项目中,我们主要会利用`Fragment`和`ViewPager`来创建一个类似QQ应用的多页面切换...

    Viewpager广告栏(可循环)

    在创建“Viewpager广告栏(可循环)”时,我们需要实现一个能够自动循环播放并支持手动滑动的广告展示模块。下面将详细讲解实现这个功能所需的关键知识点。 1. **ViewPager基础**: - `ViewPager` 是Android SDK中...

    使用ViewPager仿微信界面

    在仿微信界面中,我们通常会用到多个Fragment来代表不同的功能模块,如聊天列表、朋友圈、发现等。每个Fragment应该包含自己的视图和逻辑处理,可以通过继承Fragment类并重写onCreateView()方法来实现。 **三、设置...

    listview中嵌套viewpager实现仿淘宝搜狐主页效果

    listview中嵌套viewpager实现仿淘宝搜狐主页效果,实现listview的下拉刷新源码

    ViewPager广告栏源码

    在这个“ViewPager广告栏源码”项目中,我们可以深入理解并掌握如何利用ViewPager构建一个功能完备的广告轮播栏。 1. **ViewPager基础**: - ViewPager是Android Support Library中的一个控件,它允许用户通过横向...

    ViewPager 仿微信布局

    【ViewPager 仿微信布局】是Android开发中一个常见的需求,主要目的是实现类似微信聊天界面的左右滑动切换页面的效果。ViewPager是Android支持库中的一个组件,它允许用户在多个全屏视图之间进行平滑的水平滚动。在...

    仿淘宝,京东商品详细图片的viewpager,点击图片放大,左右滑动

    本项目是针对"仿淘宝、京东商品详细图片的viewpager"进行的设计,用户点击图片可以放大,并且支持左右滑动查看更多的图片,提供了类似电商平台的商品图片浏览体验。 首先,我们来详细了解一下ViewPager的核心功能和...

    android ViewPager自动滑动(广告栏效果)

    在Android开发中,ViewPager是一个非常常用的组件,常用于实现页面间的滑动切换,例如在应用启动页、设置页面或者我们今天关注的“广告栏效果”中。ViewPager通过懒加载和智能缓存机制,使得用户可以平滑地左右滑动...

    Fragment + ViewPager 仿 Google Play

    在Android应用开发中,"Fragment + ViewPager 仿 Google Play"是一种常见的实现方式,用于构建具有类似Google Play应用的用户界面。这个设计模式充分利用了Fragment和ViewPager的优势,为用户提供了一个可滑动的多...

    listview嵌套viewpager实现仿搜狐淘宝主页

    listview中嵌套viewpager实现仿淘宝搜狐主页效果,实现listview的下拉刷新

    自定义viewpager的顶部标签栏

    而顶部标签栏则是为了配合`ViewPager`,提供一种直观的页面切换指示和交互方式,用户可以通过点击标签来切换`ViewPager`中的页面。在本项目"自定义viewpager的顶部标签栏"中,我们将实现一个类似于网易新闻客户端...

    Viewpager仿QQ横滑退出

    本项目"Viewpager仿QQ横滑退出"旨在模仿QQ应用中的页面滑动手势,允许用户通过水平滑动页面来退出当前界面,这为用户提供了一种直观且友好的交互体验。 要实现这一功能,首先需要理解`ViewPager`的基本用法。`...

    android viewpager广告栏左右预览图片实现

    在Android开发中,ViewPager是一种非常常用的组件,常用于实现页面滑动效果,比如在广告栏、应用引导页等场景。本教程将详细讲解如何利用ViewPager实现广告栏左右预览图片的功能,让用户体验更加流畅和直观。 首先...

    开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签

    使用开源框架ViewPageIndicator 和 ViewPager 仿网易新闻客户端Tab标签,项目详情http://blog.csdn.net/xiaanming/article/details/10766053

    ViewPager带导航栏的

    【标题】:“ViewPager带导航栏”的实现与应用 在Android开发中,ViewPager是一个非常重要的组件,它用于展示可滑动的页面集合。当配合导航栏使用时,可以为用户提供流畅的多页面浏览体验,尤其适用于展示类似Tab...

    Android ViewPager实现类似广告滚动的效果

    在Android应用开发中,ViewPager是一种常用的组件,它允许用户通过左右滑动来浏览多个页面,非常适合用来实现诸如轮播图、广告展示等效果。在这个场景中,我们将探讨如何利用ViewPager来创建一个类似广告滚动的功能...

    viewpager与导航栏分开

    在Android开发中,"viewpager与导航栏分开"是一个常见的需求,主要用于构建具有多个内容页面且需要一个独立导航栏的应用界面。ViewPager是Android SDK提供的一种用于展示多个视图并可滑动切换的组件,而独立的导航栏...

Global site tag (gtag.js) - Google Analytics