Android:用ViewPager實現廣告欄

來源:互聯網
上載者:User

標籤:android   viewpager   廣告欄   

現在常見的廣告欄效果,自動切換廣告,也可手動滑動切換。




我用ViewPager實現的,廢話不多說,上代碼:


1、布局檔案 layout_ad_pager.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="160dp"    android:baselineAligned="false" >    <ImageView        android:id="@+id/home_default_image"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:scaleType="fitXY"        android:src="@drawable/home_log_default"        android:visibility="gone" />    <android.support.v4.view.ViewPager        android:id="@+id/adv_pager"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:background="@drawable/img2" >    </android.support.v4.view.ViewPager>    <LinearLayout        android:id="@+id/viewGroup"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_gravity="center_horizontal|bottom"        android:layout_marginBottom="5dp"        android:gravity="center"        android:orientation="horizontal" >    </LinearLayout></FrameLayout>

2、主要代碼 AdPagerMainActivity.java

package app.adpager;import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.AtomicInteger;import android.support.v7.app.ActionBarActivity;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.annotation.SuppressLint;import android.content.Context;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.os.Parcelable;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.widget.ImageView;import android.widget.LinearLayout;public class AdPagerMainActivity extends ActionBarActivity {        private ImageView mDefaultImage = null;        private ViewPager mImagePager = null;        private ImageView[] mImageViews = null;        private AtomicInteger what = new AtomicInteger(0);        private boolean isContinue = true;        private List<View> advPics;        private Context mContext;        private ImageView mImageView;        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.layout_ad_pager);        init();        initView();        initViewPager();    }        /**     * 初始化資料     */    private void init() {        mContext = this;        advPics = new ArrayList<View>();    }        /**     * 初始化控制項     */    private void initView() {        // TODO Auto-generated method stub        mDefaultImage = (ImageView) findViewById(R.id.home_default_image);        mImagePager = (ViewPager) findViewById(R.id.adv_pager);    }        /**     * void     */    private void initViewPager() {        // TODO Auto-generated method stub        mDefaultImage.setVisibility(View.GONE);        mImagePager.setVisibility(View.VISIBLE);                ImageView img1 = new ImageView(mContext);        img1.setBackgroundResource(R.drawable.img1);        advPics.add(img1);                ImageView img2 = new ImageView(mContext);        img2.setBackgroundResource(R.drawable.img2);        advPics.add(img2);                ImageView img3 = new ImageView(mContext);        img3.setBackgroundResource(R.drawable.img3);        advPics.add(img3);                ImageView img4 = new ImageView(mContext);        img4.setBackgroundResource(R.drawable.img4);        advPics.add(img4);                // group是R.layou.mainview中的負責包裹小圓點的LinearLayout.        ViewGroup group = (ViewGroup) findViewById(R.id.viewGroup);        mImageViews = new ImageView[advPics.size()];        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(13, 13);        layoutParams.setMargins(5, 0, 5, 1);                for (int i = 0; i < advPics.size(); i++) {            mImageView = new ImageView(this);            mImageView.setLayoutParams(layoutParams);            mImageViews[i] = mImageView;            if (i == 0) {                // 預設選中第一張圖片                mImageViews[i].setBackgroundResource(R.drawable.item_focus);            }            else {                mImageViews[i].setBackgroundResource(R.drawable.item_unfocus);            }            group.addView(mImageViews[i]);        }                mImagePager.setAdapter(new AdvAdapter(advPics));        mImagePager.setOnPageChangeListener(new GuidePageChangeListener());        // 按下時不繼續定時滑動,彈起時繼續定時滑動        mImagePager.setOnTouchListener(new View.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:                        isContinue = true;                        break;                    default:                        isContinue = true;                        break;                }                return false;            }        });        // 定時滑動線程        new Thread(new Runnable() {                        @Override            public void run() {                while (true) {                    if (isContinue) {                        viewHandler.sendEmptyMessage(what.get());                        whatOption();                    }                }            }                    }).start();    }        /**     * 操作圓點輪換變背景     */    private void whatOption() {        what.incrementAndGet();        if (what.get() > mImageViews.length - 1) {            what.getAndAdd(-mImageViews.length);        }        try {            if (what.get() == 1) {                Thread.sleep(3000);            }            else {                Thread.sleep(2000);            }        }        catch (InterruptedException e) {        }    }        /**     * 處理定時切換廣告欄圖片的控制代碼     */    @SuppressLint("HandlerLeak")    private final Handler viewHandler = new Handler() {                @Override        public void handleMessage(Message msg) {            mImagePager.setCurrentItem(msg.what);            super.handleMessage(msg);        }    };        /** 指引頁面改監聽器 */    private final class GuidePageChangeListener implements OnPageChangeListener {                @Override        public void onPageScrollStateChanged(int arg0) {                    }                @Override        public void onPageScrolled(int arg0, float arg1, int arg2) {                    }                @Override        public void onPageSelected(int arg0) {            arg0 = arg0 % advPics.size();            for (int i = 0; i < mImageViews.length; i++) {                mImageViews[arg0].setBackgroundResource(R.drawable.item_focus);                if (arg0 != i) {                    mImageViews[i].setBackgroundResource(R.drawable.item_unfocus);                }            }            what.set(arg0);        }    }        /**     * @Description: 廣告欄PaperView 圖片適配器     */    private final class AdvAdapter extends PagerAdapter {        private List<View> views = null;                public AdvAdapter(List<View> views) {            this.views = views;        }                @Override        public void destroyItem(View arg0, int arg1, Object arg2) {            ((ViewPager) arg0).removeView(views.get(arg1));        }                @Override        public void finishUpdate(View arg0) {                    }                @Override        public int getCount() {            return views.size();        }                @Override        public Object instantiateItem(View arg0, int arg1) {            ((ViewPager) arg0).addView(views.get(arg1), 0);            return views.get(arg1);        }                @Override        public boolean isViewFromObject(View arg0, Object arg1) {            return arg0 == arg1;        }                @Override        public void restoreState(Parcelable arg0, ClassLoader arg1) {                    }                @Override        public Parcelable saveState() {            return null;        }                @Override        public void startUpdate(View arg0) {                    }    }}

圖片資源:

 








Android:用ViewPager實現廣告欄

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.