android自訂view之---組合view

來源:互聯網
上載者:User

標籤:控制項   安卓   自訂view   

最近工作比較輕鬆,沒有什麼事情幹,於是進入高產模式(呃。。。。高產似xx)。

應該很多童鞋對自訂view這個東西比較抵觸,可能是聽網上說view比較難吧,其實自訂view並沒有很難

自訂view分為三種

1.自繪view

2.群組控制項view

3.重寫系統view

今天我們就來以一個小例子講一下自訂view中的群組控制項view,所謂的群組控制項view就是使用系統預設的view來進行組合成一個新的view。並不進行圖形的繪製操作。好了,今天的目標是把之前用Animation實現的loading動畫做成一個view來使用,如果你還不瞭解Animation動畫 可以去開開這篇部落格:動畫介紹--Animation 實現loading動畫效果

老規矩,先上:


可以看到效果跟上篇部落格差不多,但是現在他可是一個view。我們首先來看一下布局檔案:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent" android:layout_height="match_parent"><com.wingsoft.loadinganimation.LoadingView    android:id="@+id/loading"    android:layout_width="300dp"    android:layout_centerInParent="true"    android:layout_height="300dp"></com.wingsoft.loadinganimation.LoadingView>    <Button        android:id="@+id/button_cancel"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="cancel"/></RelativeLayout>

這是主布局檔案, 一個相對布局,一個按鈕。 看到其中一個控制項是帶包名的,說明這個控制項是我們自訂的控制項。

由於我們今天介紹的是控制群組合view,所以建立一個類讓他繼承於FrameLayout

public class LoadingView extends FrameLayout {    private ImageView mImageView;    private TextView mTextView;    private AnimationSet mImageAni = new AnimationSet(true);    private AnimationSet mTextAni = new AnimationSet(true);    public LoadingView(Context context, AttributeSet attrs) {        super(context, attrs);        LayoutInflater.from(context).inflate(R.layout.loading_view,this);        mImageAni = new AnimationSet(true);        mTextAni = new AnimationSet(true);        mImageView = (ImageView) findViewById(R.id.loadingView_point);        mTextView = (TextView) findViewById(R.id.loadingView_loading);        TranslateAnimation ta = new TranslateAnimation(100, 0, 200, 0);        ta.setDuration(5000);        RotateAnimation ra = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);        ra.setDuration(5000);        mImageAni.addAnimation(ta);        mImageAni.addAnimation(ra);        ScaleAnimation sa = new ScaleAnimation(0, 1, 0, 1, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);        sa.setDuration(5000);        AlphaAnimation aa = new AlphaAnimation(0, 1);        aa.setDuration(5000);        mTextAni.addAnimation(sa);        mTextAni.addAnimation(aa);        aa.setAnimationListener(new Animation.AnimationListener() {            @Override            public void onAnimationStart(Animation animation) {            }            @Override            public void onAnimationEnd(Animation animation) {                mTextView.startAnimation(mTextAni);                mImageView.startAnimation(mImageAni);            }            @Override            public void onAnimationRepeat(Animation animation) {            }        });    }    public void start(){        mTextView.startAnimation(mTextAni);        mImageView.startAnimation(mImageAni);    }    public void stop(){        mTextView.clearAnimation();        mImageView.clearAnimation();    }}

關鍵點在於 實現一個兩個參數的構造器。在構造器裡面調用LayoutInflater 將布局檔案轉換成view; 之後再給我們的view 添加兩個方法 一個是start(),一個是stop() 用來控制動畫是否播放。這樣便完成了view的編寫。下面在MainActivity中對他進行操作。

public class MainActivity extends ActionBarActivity {    private LoadingView mLoadingView;    private Button mButton;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mLoadingView = (LoadingView) findViewById(R.id.loading);        mButton = (Button)findViewById(R.id.button_cancel);        mLoadingView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                mLoadingView.start();            }        });        mButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                mLoadingView.stop();            }        });    }}

可以看到,我們可以像使用系統控制項一樣使用這個view了,怎麼樣,很神奇吧。你也快試試!之後我們會介紹自繪view。

原始碼下載


著作權聲明:本文為博主原創文章,歡迎註明出處後轉載。

android自訂view之---組合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.