文档章节

ViewPager Banner(广告墙)

军歌
 军歌
发布于 2014/02/18 11:52
字数 760
阅读 1418
收藏 1

layout.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

	<android.support.v4.view.ViewPager
	    android:id="@+id/viewpager"
	    android:layout_width="match_parent" 
	    android:layout_height="100dp" 
	    />    
    
    
    <LinearLayout 
        android:id="@+id/llyt_welcome_dot" 
    	android:gravity="center_horizontal"
    	android:layout_width="match_parent" 
    	android:layout_height="wrap_content" 
    	android:layout_marginTop="65.0dip" >
    	
    	<ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:clickable="true"
            android:padding="15.0dip"
            android:src="@drawable/welcome_dot" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:clickable="true"
            android:padding="15.0dip"
            android:src="@drawable/welcome_dot" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:clickable="true"
            android:padding="15.0dip"
            android:src="@drawable/welcome_dot" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:clickable="true"
            android:padding="15.0dip"
            android:src="@drawable/welcome_dot" />
        
      

    </LinearLayout>

</FrameLayout>

java.class

public class MainActivity extends Activity
{

    private static String TAG = "MainActivity";
    /**
     * Viewpager对象
     */
    private ViewPager mViewPager;
    
    /**
     * Viewpager的适配器
     */
    private ViewPagerAdapter mVpAdapter;

    /**
     * 存放view的列表
     */
    private List<View> mViews;
    /**
     * 底部小点图片
     */
    private ImageView[] dots;

    /**
     * 记录当前view的位置
     */
    private int currentIndex;

    /**
     * 记录当前自动滑动的状态,true就滑动,false停止滑动
     */
    private boolean isContinue = true;

    private Handler mHandler;
    
    private Timer timer;
    
    private static boolean isSleep = true;
    
    /**
     * 设置viewpager的初始页面
     */
    private static final int initPositon = 50000;
    
    /**
     * viewpager的当前页面
     */
    private static int currentPosition = initPositon;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mViews = new ArrayList<View>();

        LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.MATCH_PARENT);
        Resources res = getResources();
        for (int i = 0; i < Images.mPics.length; i++)
        {
            ImageView mImageView = new ImageView(this);
            mImageView.setLayoutParams(mParams);
            Bitmap bitmap = BitmapFactory.decodeResource(res, Images.mPics[i]);

            mImageView.setImageBitmap(bitmap);

            mViews.add(mImageView);
        }
        // Handler对象更新UI
        mHandler = new Handler()
        {

            public void handleMessage(Message msg)
            {
                mViewPager.setCurrentItem(currentPosition);
            }
        };

        //启动线程,监控是否要自动滑动
        timer = new Timer();
        timer.schedule(new TimerTask()
        {
            
            public void run()
            {
                while (true)
                {
                    if (isContinue)
                    {
                     /*   if (isSleep)
                        {
                            sleep(4000);                           
                        }      */    
                        
                        currentPosition ++;
                        mHandler.sendEmptyMessage(0);
                        sleep(3000);
                       /* if (!isSleep)
                        {
                            sleep(3000);
                        }
                        isSleep = false;*/
                    }
                    
                }
            }
        }, 4000);       

        mViewPager = (ViewPager) findViewById(R.id.viewpager);
        mVpAdapter = new ViewPagerAdapter(mViews);
        mViewPager.setAdapter(mVpAdapter);
        mViewPager.setCurrentItem(initPositon);
        mViewPager.setOnPageChangeListener(new MyPageChangeListener());
        mViewPager.setOnTouchListener(new MyTouchListener());
        initDots();

    }

    /**
     * 底部圆点初始化
     */
    private void initDots()
    {

        LinearLayout mLinearLayout = (LinearLayout) findViewById(R.id.llyt_welcome_dot);

        dots = new ImageView[Images.mPics.length];

        for (int i = 0; i < Images.mPics.length; i++)
        {
            dots[i] = (ImageView) mLinearLayout.getChildAt(i);
            // 设置为灰色
            dots[i].setEnabled(true);
            // 为每一个imageview添加点击监听
            // dots[i].setOnClickListener(new MyOnClickListener());
            // 设置位置tag,方面取出与当前位置对应
            dots[i].setTag(i);
        }
        currentIndex = 0;
        //设置第一个圆点高亮
        dots[currentIndex].setEnabled(false);
    }

    /**
     * 设置底部圆点的高亮
     * @param position
     *            将要显示的view的位置
     */
    private void setCurrentDot(int position)
    {
        if (position < 0 || position > Images.mPics.length - 1)
        {
            return;
        }
        dots[position].setEnabled(false);
        dots[currentIndex].setEnabled(true);
        currentIndex = position;
    }

    /*
     * class MyOnClickListener implements OnClickListener{
     * 
     * @Override public void onClick(View v) { int position = (Integer)
     * v.getTag(); mViewPager.setCurrentItem(position); }
     * 
     * }
     */

    /**
     * viewpager页面变化的监听器
     * @author user
     *
     */
    class MyPageChangeListener implements OnPageChangeListener
    {

        @Override
        public void onPageScrolled(int position, float positionOffset,
                int positionOffsetPixels)
        {
            // TODO Auto-generated method stub

        }

        @Override
        public void onPageSelected(int position)
        {
            setCurrentDot(position % mViews.size());
            currentPosition = position;
        }

        @Override
        public void onPageScrollStateChanged(int state)
        {
            // TODO Auto-generated method stub

        }

    }

    /**
     * 监听手势监听器
     * @author user
     *
     */
    class MyTouchListener implements OnTouchListener
    {

        @Override
        public boolean onTouch(View v, MotionEvent event)
        {
            switch (event.getAction())
            {
            case MotionEvent.ACTION_DOWN:
            case MotionEvent.ACTION_MOVE:
                isContinue = false;                
                break;
            case MotionEvent.ACTION_UP:
            default:
                isContinue = true;
                isSleep = true;
                break;
            }
            return false;
        }

    }
    
    /**
     * 设置线程间隔
     */
    private void sleep(long time){
        try
        {
           Thread.sleep(time); 
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }

}
adapter.class
public class ViewPagerAdapter extends PagerAdapter
{
    
    private static String TAG = "ViewPagerAdapter";
    /**
     * 界面列表
     */
    private List<View> mViews;
    
    public ViewPagerAdapter(List<View> mViews)
    {
        this.mViews = mViews;
    }
    /**
     * 获取当前页面数
     */
    @Override
    public int getCount()
    {
       // Log.v(TAG, "getCount" + mViews.size());
        return Integer.MAX_VALUE;
    }
    
    @Override
    public boolean isViewFromObject(View view, Object object)
    {
        
       // Log.v(TAG, "isViewFromObject" + (view == object));
        return view == object;
    }
    /**
     * 适配器给container容器添加视图
     */
    @Override
    public Object instantiateItem(ViewGroup container, int position)
    {
        Log.v(TAG, "instantiateItem" + position);
    
        position = position % mViews.size();
        container.addView(mViews.get(position), 0);
        return mViews.get(position);
        
    }
    /**
     * 适配器移除container容器中的视图
     */
    @Override
    public void destroyItem(ViewGroup container, int position, Object object)
    {
        Log.v(TAG, "destroyItem" + position);
        position = position % mViews.size();
        container.removeView(mViews.get(position));        
    }  

}









© 著作权归作者所有

共有 人打赏支持
军歌
粉丝 9
博文 86
码字总数 43501
作品 0
深圳
程序员
私信 提问
Android 打造一个丝滑的自动轮播控件

现在很多的 App 都有自动轮播的 banner 界面,用于展示广告图片或者显示当前比较热门的一些活动,除了具备比较酷炫的效果之外,通过轮播的方式来减少对界面的占用,也是很赞的一个设计点。本...

developerHaoz
2018/08/08
0
0
ViewPager不能高度自适应?height=wrap_content 无效解决办法

/* http://my.oschina.net/lifj/blog/283346 */ ViewPager用的很多,主要用啦展示广告条。可是高度却不能自适应内容,总是会占满全屏,即使设置android:height="wrap_content"也是没有用的。...

拉风的道长
2014/06/24
0
9
解决ViewFlow在Scrollview下滑动不灵敏的BUG

第一次在开源中国发分享贴,有点小紧张,把我最近遇到的问题和解决方法分享出来,供遇到此类问题的朋友参考 PS:关联代码来源于开源社区 最近针对公司的电商客户端做优化,首页实现类似主流电...

寒天
2014/06/13
4.1K
1
Android中广告轮播框架Banner----(功能很全面

转载地址:https://github.com/youth5201314/banner 参考视频:http://ke.atguigu.com/course/150 Android图片轮播控件 新框架发布,欢迎大家Star XFrame - Android快速开发框架 XFrame详细功...

丁佳辉
2018/08/02
0
0
Android ViewPager真正的实现无限循环滚动

Android ViewPager真正的实现无限循环滚动 在存放View的集合中的第一个位置放入真正的最后一个View,而在最后一个放入第一个。具体请参照下图以及代码! package com.xinye.ui; import java....

带梦想一7飞
2013/07/22
0
1

没有更多内容

加载失败,请刷新页面

加载更多

C++随笔(四)Nuget打包

首先把自己编译好的包全部准备到一个文件夹 像这样 接下来新建一个文本文档,后缀名叫.nuspec 填写内容 <?xml version="1.0"?><package xmlns="http://schemas.microsoft.com/packaging/201......

Pulsar-V
56分钟前
2
0
再谈使用开源软件搭建数据分析平台

三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发...

naughty
今天
3
0
Python3的日期和时间

python 中处理日期时间数据通常使用datetime和time库 因为这两个库中的一些功能有些重复,所以,首先我们来比较一下这两个库的区别,这可以帮助我们在适当的情况下时候合适的库。 在Python文...

编程老陆
今天
2
0
分布式面试整理

并发和并行 并行是两个任务同时进行,而并发呢,则是一会做一个任务一会又切换做另一个任务。 临界区 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用,但是每一次,只能有...

群星纪元
今天
3
0
手机通过wifi遥控arduino

手机下载Blinker 从Blinker官网下载手机App,安装到手机。 手机连接WiFi。 点击我的设备右上角的"+"添加设备,选择Arduino -> wifi接入,复制密钥以备后续使用。 点击新建的设备,可以在新界...

davidwbnu
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部