Androd開發之廣告欄設計,androd開發廣告欄

來源:互聯網
上載者:User

Androd開發之廣告欄設計,androd開發廣告欄

  對於做Android開發的工程師對於這個效果的實現一定不陌生,本篇我將帶領大家先簡單實現這個效果,再為大家介紹一下其中的原理,方便新手學習,老手複習,內容簡單易懂,沒有基礎一樣學習,不扯沒用的了,下面開始我們本篇內容的乾貨。

  對於這個效果的實現,第一次接觸時倍感困難,在之前的部落格中為大家介紹了如何?引導頁效果,雖然帶領大家實現了上述功能,但是對於具體的實現,其實內心有疑惑的,當初不是什麼的清楚其中的原理,經過這些天的不懈努力,終於被我攻破了,開始介紹一下實現的原理:1、既然是廣告效果,一定需要圖片切換;2、圖片切換要有標識,方便使用者查看;3、圖片切換要實現自動內容切換。這三點中最難的當屬後兩個了,在之前的文章中我已經帶領大家實現過第一個效果了,有興趣的小童鞋可以自行學習。

  我們開始今天的工作,首先我們需要準備6張圖片(兩張圓點圖片+四張任意圖片),用於我們實現的需要。對於圓點圖片大家有時間不容易找,我為大家提供兩種參考:

  白色:

  藍色:

  僅供參考,大家如果有更好的,請繞道。

  準備好素材後,下面我們開始設計我們的代碼:
  一、在res下建立一個drawable檔案夾,在其中建立一個round.xml,用於我們上面兩張圖片切換顯示控制,具體代碼如下:

<?xml version="1.0" encoding="UTF-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_selected="true" android:drawable="@drawable/blank"/>    <item android:state_selected="false" android:drawable="@drawable/white"/></selector>

  二、下面我們開始我們的布局檔案書寫:

<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"    tools:context=".MainActivity" >    <android.support.v4.view.ViewPager        android:id="@+id/viewPager"        android:layout_width="match_parent"        android:layout_height="match_parent"        />    <LinearLayout         android:id="@+id/ll"        android:orientation="horizontal"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_marginBottom="20dp"        android:layout_centerHorizontal="true"        >         <ImageView             android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:background="@drawable/round"            android:layout_marginRight="5dp"            android:visibility="gone"            android:clickable="true"            />         <ImageView             android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:background="@drawable/round"            android:layout_marginRight="5dp"            android:visibility="gone"            android:clickable="true"            />         <ImageView             android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:background="@drawable/round"            android:layout_marginRight="5dp"            android:visibility="gone"            android:clickable="true"            />         <ImageView             android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:background="@drawable/round"            android:layout_marginRight="5dp"            android:visibility="gone"            android:clickable="true"            />         <ImageView             android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:background="@drawable/round"            android:layout_marginRight="5dp"            android:visibility="gone"            android:clickable="true"            />    </LinearLayout></RelativeLayout>

   注釋:藍色標註處表示LinearLayout至於介面底部;紅色標註處表示應用我們配置好的圖片資訊,現在我們的介面效果是看不出來的,因為ImagerView我設定了銷毀屬性(android:visibility="gone"),這個不影響,在下面的代碼中我們來控制顯示。

  三、我們實現圖片切換時,用到了PagerAdapter,這裡為了方便我們設計代碼,我設計了一個自訂的PagerAdapter對象:MyselfPagerAdapter.java:

public class MyselfPagerAdapter extends PagerAdapter {        private List<View> view;        public MyselfPagerAdapter(List<View> view){        this.view = view;    }    @Override    public int getCount() {        if(view!=null){            return view.size();        }        return 0;    }    @Override    //銷毀position位置的介面    public void destroyItem(View container, int position, Object object) {        ((ViewPager) container).removeView(view.get(position));    }    @Override    //初始化position位置的介面    public Object instantiateItem(View container, int position) {        ((ViewPager) container).addView(view.get(position));        return view.get(position);    }    @Override    public boolean isViewFromObject(View arg0, Object arg1) {        return arg0 == arg1;    } }

  下面就是我們今天的重頭戲了:MainActivity.java,先看代碼,下面做解釋。

public class MainActivity extends Activity implements OnPageChangeListener, OnClickListener{        private ViewPager vp;    private MyselfPagerAdapter myselfPagerAdapter;    private List<View> listView;    private ImageView[] round;        private static final int [] imagerResource = {R.drawable.imager1, R.drawable.imager2, R.drawable.imager3, R.drawable.imager4};        public int currentIndex = 0;    private Handler handler = new Handler();    public MyRunnable myRunnable = new MyRunnable();        public boolean flag = false;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.activity_main);                init();                vp = (ViewPager) findViewById(R.id.viewPager);        myselfPagerAdapter  = new MyselfPagerAdapter(listView);        vp.setAdapter(myselfPagerAdapter);        vp.setOnPageChangeListener(this);                //初始化底部小點          initRound();                handler.postDelayed(myRunnable, 3000);            }        private void init() {        listView = new ArrayList<View>();        for(int i = 0; i<imagerResource.length; i++){            ImageView imageView = new ImageView(this);            imageView.setImageResource(imagerResource[i]);            listView.add(imageView);        }    }        private void initRound() {        LinearLayout ll = (LinearLayout) findViewById(R.id.ll);        round = new ImageView[imagerResource.length];        for(int i=0; i<imagerResource.length; i++){            round[i] = (ImageView) ll.getChildAt(i);            round[i].setVisibility(View.VISIBLE);            round[i].setOnClickListener(this);            round[i].setSelected(false);            round[i].setTag(i);        }        round[currentIndex].setSelected(true);    }        private void setCurView(int position){        if(position<0||position>=imagerResource.length){            return;        }        vp.setCurrentItem(position);    }        private void setRoundView(int position){        if(position<0||position>=imagerResource.length||currentIndex==position){            return;        }        round[position].setSelected(true);        round[currentIndex].setSelected(false);        currentIndex = position;    }    @Override    //當滑動狀態改變時調用      public void onPageScrollStateChanged(int arg0) {        // TODO Auto-generated method stub            }    @Override    //當前頁面被滑動時調用     public void onPageScrolled(int arg0, float arg1, int arg2) {        // TODO Auto-generated method stub            }    @Override    //當新的頁面被選中時調用      public void onPageSelected(int arg0) {        // TODO Auto-generated method stub        setRoundView(arg0);    }    @Override    public void onClick(View v) {        int position = (Integer)v.getTag();        setCurView(position);        setRoundView(position);    }        class MyRunnable implements Runnable{        @Override        public void run() {            int n = currentIndex;                        if(n == imagerResource.length-1){                flag = false;            }else{                if(n == 0){                    flag = true;                }            }            if(flag){                n = (n + 1)%listView.size();            }else{                n = (n - 1)%listView.size();            }                        setCurView(n);            setRoundView(n);            handler.postDelayed(myRunnable, 3000);        }            }}

  這兩段代碼的作用:為我們添加ImagerView的點擊事件做鋪墊

private void setCurView(int position){        if(position<0||position>=imagerResource.length){            return;        }        vp.setCurrentItem(position);    }        private void setRoundView(int position){        if(position<0||position>=imagerResource.length||currentIndex==position){            return;        }        round[position].setSelected(true);        round[currentIndex].setSelected(false);        currentIndex = position;    }

  這段代碼的作用:實現圖片的自動切換,有別於平常的切換,大家運行自行查看:

class MyRunnable implements Runnable{        @Override        public void run() {            int n = currentIndex;                        if(n == imagerResource.length-1){                flag = false;            }else{                if(n == 0){                    flag = true;                }            }            if(flag){                n = (n + 1)%listView.size();            }else{                n = (n - 1)%listView.size();            }                        setCurView(n);            setRoundView(n);            handler.postDelayed(myRunnable, 3000);        }            }

  最後附一張,供大家參考:

  

  今天的介紹就到這裡,大家有什麼疑問,請留言。

  

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.