Android的ViewAnimator及其子類ViewSwitcher-android學習之旅(三十三)

來源:互聯網
上載者:User

Android的ViewAnimator及其子類ViewSwitcher-android學習之旅(三十三)

ViewAnimator繼承了FrameLayout,多個組件重合在一起,可以加入多個組件,然後切換的時候會有動畫。

ViewAnimator及其子類的繼承關係

ViewAnimator常用屬性

ViewSwitcher的簡介

ViewSwitcher繼承了ViewAnimator,組件重疊。
setFactory()方法可以設定ViewFactory(ViewSwitcher.ViewFactory),用ViewFactroy來實現View。

仿android系統的Launcher介面
package peng.liu.test;import android.app.Activity;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.GridView;import android.widget.ImageView;import android.widget.TextView;import android.widget.ViewSwitcher;import java.util.ArrayList;public class MainActivity extends Activity {    public static final int NUMBER_PER_SCREEN = 12;    public static class DataItem{        public String dataName;        public Drawable drawable;    }    private ArrayList list = new ArrayList();    private int screenNo = -1;    private int screenCount;    ViewSwitcher viewSwitcher;    LayoutInflater infalter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        for(int i = 0;i<40;i++){            String lable = ""+i;            Drawable drawableTwo = getResources().getDrawable(R.drawable.ic_launcher);            DataItem item = new DataItem();            item.dataName = lable;            item.drawable = drawableTwo;            list.add(item);        }        screenCount = list.size() % NUMBER_PER_SCREEN == 0 ? list.size()/NUMBER_PER_SCREEN:list.size()/NUMBER_PER_SCREEN+1;        viewSwitcher = (ViewSwitcher) findViewById(R.id.viewSwitcher);        viewSwitcher.setFactory(new ViewSwitcher.ViewFactory() {            @Override            public View makeView() {                return infalter.inflate(R.layout.slide,null);            }        });        next(null);    }    public void next(View view){        if (screenNo < screenCount - 1){            screenNo++;            viewSwitcher.setInAnimation(this,R.anim.slide_in);            viewSwitcher.setOutAnimation(this,R.anim.slide_out);            (GridView)(viewSwitcher.getNextView()).setAdapter(adapter);            viewSwitcher.showNext();        }    }    public void prev(View view){        if (screenNo > 0){            screenNo--;            viewSwitcher.setInAnimation(this,R.anim.slide_in);            viewSwitcher.setOutAnimation(this,R.anim.slide_out);            (GridView)(viewSwitcher.getNextView()).setAdapter(adapter);            viewSwitcher.showNext();        }    }    public BaseAdapter adapter = new BaseAdapter() {        @Override        public int getCount() {            if (screenNo  == screenCount-1&&list.size()%NUMBER_PER_SCREEN != 0 ){                return list.size()/NUMBER_PER_SCREEN;            }else{                return NUMBER_PER_SCREEN;            }        }        @Override        public DataItem getItem(int i) {            return list.get(screenNo*NUMBER_PER_SCREEN+i);        }        @Override        public long getItemId(int i) {            return i;        }        @Override        public View getView(int i, View convertView, ViewGroup viewGroup) {            View view = convertView;            if (convertView == null){                view = infalter.inflate(R.layout.slide,null);            }            ImageView imageView = (ImageView) view.findViewById(R.id.imageView);            imageView.setImageDrawable(getItem(i).drawable);            TextView text = (TextView) view.findViewById(R.id.textView);            text.setText(getItem(i).dataName);            return view;        }    };}
布局代碼
   
    
                
    

聯繫我們

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