歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Andrid自定義組件之垂直SeekBar以及播放幀動畫

一個優秀的Android應用程序少不了一個好的用戶界面,下面說說我在“肥胖測試”程序中所遇到的幾個界面問題。

1.  自定義組件

Android開發環境中已經自帶了很多標准的組件,可以讓我們輕松的設計出一個不錯的界面,但有時候這些標准組件無法滿足我們的個性化需求,這是就需要我們自己制作自定義組件。

我們這個程序中需要用戶輸入自己的身高和體重,我沒有用EditText 讓用戶輸入,而是讓用戶調節SeekBar 來輸入數據。體重用水平SeekBar 調節,身高用垂直SeekBar 調節,一開始感覺很容易實現,可是正真開發時卻發現一個頭疼的問題:SeekBar 不能設置成垂直的。那就只有自己重寫SeekBar了,找到Android自帶SeekBar的源碼,研究調試了幾天,終於實現了垂直SeekBar,下面是我的代碼,經測試可以直接使用,希望對大家有幫助:

public class myBar extends SeekBar       //繼承SeekBar

{

//重寫onSizeChanged,因為從水平變成垂直,所以要交換Width和Height

    protected void onSizeChanged(int w, int h, int oldw, int oldh)

    {

          super.onSizeChanged(h, w, oldw, oldh);

    }

     //重寫onDraw,關鍵旋轉,這裡可以自定義在原來水平的基礎上旋轉角度

    protected void onDraw(Canvas c)

    {

        // 旋轉

        c.rotate(-90);

        //控制左右位置,要自己調試,如果SeekBar有偏差可以在這裡調整

         c.translate(-this.getHeight(), 0);

        super.onDraw(c);

    }

//重寫trackTouchEvent,主要是對旋轉後的坐標進行交換修正

    private voidtrackTouchEvent(MotionEvent event)

    {

        final int height = getHeight();

        int mPaddingBottom = this.getBottom();      

        int y = (int)event.getY();                 

        float scale = 0;

        float progress = 0;

        if(y > height)//mPaddingBottom)

        {

            scale = 0.0f;

        }

        else if( y>0 )

        {

            scale = 1-(float)y / (float)height;       

        }

        else

        {

        scale= 1.0f;

        }

        final int max = getMax();

        progress = scale * max;                         

        setProgress(Math.round(progress));                  

        setThumbPos(getHeight(), mThumb, scale, 0) ;    

    }

}

    SeekBar 的重寫 主要是旋轉,還有對坐標的重新計算操作,具體的大家可以研究一下源碼,實現自己的特殊功能。

    下面就要把重寫後的垂直SeekBar 部署到我們的界面裡了,和其他標准組件一樣,在layout的XML文件中鍵入下面語句:

<com.bill.fatTest.myBar

android:id="@+id/billfatTestSlideBar1" android:thumb="@drawable/thumb2"

android:paddingTop="10dip"

android:layout_below="@+id/btn_ok" android:layout_alignLeft="@+id/btn_ok"android:layout_alignRight="@+id/btn_ok"

android:layout_width="30dip"

android:layout_height="fill_parent" >

</com.bill.fatTest.SlideBar>

具體設置按自己的需要,和正常SeekBar設置一樣,要注意的就是需要把自己重寫的SeekBar 的完整包路徑名加上去com.bill.fatTest.myBar,下面是我的一個界面,左邊那個垂直的SeekBar 即重寫後的效果

Copyright © Linux教程網 All Rights Reserved