Android自定義標(biāo)尺控件(選擇身高、體重等)

自定義view學(xué)習(xí)(第一章)


1诡必、自定義刻度尺控件

在我們想要獲取用戶的身高體重等信息時(shí),直接讓他們輸入顯然不夠友好偶然看到一款A(yù)pp用了類似刻度尺的界面讓用戶選擇搔扁,覺得很贊爸舒。所有決定實(shí)現(xiàn)下。
實(shí)現(xiàn)的最終效果如下圖所示:

7c0d4213-1242-496b-9898-0d04d14f3097.gif

2稿蹲、使用方式
2.1 在gradle添加依賴
compile 'com.zkk.view:ZkkRulerView:1.0.0'
2.2 在xml中設(shè)置
<com.zkk.view.rulerview.RulerView
    android:id="@+id/ruler_height"
    android:layout_width="fill_parent"
    android:layout_height="58.0dip"
    android:layout_marginTop="24.0dip"
    app:alphaEnable="true"
    app:lineColor="@color/gray"
    app:lineMaxHeight="40dp"
    app:lineMidHeight="30dp"
    app:lineMinHeight="20dp"
    app:lineSpaceWidth="10dp"
    app:lineWidth="2dip"
    app:textColor="@color/black"
    app:minValue="80.0"
    app:maxValue="250.0"
    app:perValue="1"
    app:selectorValue="165.0"
    />
2.3 在activity中只需調(diào)用一個(gè)方法和一個(gè)數(shù)值的回調(diào)
 ruler_height=(RulerView)findViewById(R.id.ruler_height);
 ruler_weight.setOnValueChangeListener(new RulerView.OnValueChangeListener() {
            @Override
            public void onValueChange(float value) {
                tv_register_info_weight_value.setText(value+"");
            }
        });

/**
     * 
     * @param selectorValue 未選擇時(shí) 默認(rèn)的值 滑動(dòng)后表示當(dāng)前中間指針正在指著的值
     * @param minValue   最大數(shù)值
     * @param maxValue   最小的數(shù)值
     * @param per   最小單位  如 1:表示 每2條刻度差為1.   0.1:表示 每2條刻度差為0.1 在demo中 身高mPerValue為1  體重mPerValue 為0.1
     */
ruler_weight.setValue(165, 80, 250, 1); 

2扭勉、實(shí)現(xiàn)講解

首先先無恥的將github地址拋出:
https://github.com/panacena/RuleView

      <TextView
            android:id="@+id/tv_register_info_height_value"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="11.0dip"
            android:includeFontPadding="false"
            android:maxHeight="24.0sp"
            android:text="165"
            android:textColor="#cc222222"
            android:textSize="24.0sp"/>
        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">

            <com.zkk.view.RulerView
                android:id="@+id/ruler_height"
                android:layout_width="fill_parent"
                android:layout_height="58.0dip"
                android:layout_marginTop="24.0dip"/>

            <ImageView
                android:layout_width="14.0dip"
                android:layout_height="46.0dip"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="11.0dip"
                android:scaleType="fitXY"
                android:src="@drawable/user_info_ruler_height"/>
        </RelativeLayout>

自定義了一個(gè) RulerView。代碼就不一一寫出苛聘,在源碼中有詳細(xì)的解釋涂炎。

    private int mMinVelocity;
    private Scroller mScroller;  //Scroller是一個(gè)專門用于處理滾動(dòng)效果的工具類   用mScroller記錄/計(jì)算View滾動(dòng)的位置,再重寫View的computeScroll()设哗,完成實(shí)際的滾動(dòng)
    private VelocityTracker mVelocityTracker; //主要用跟蹤觸摸屏事件(flinging事件和其他gestures手勢事件)的速率唱捣。
    private int mWidth;
    private int mHeight;

    private float mSelectorValue = 50.0f; // 未選擇時(shí) 默認(rèn)的值 滑動(dòng)后表示當(dāng)前中間指針正在指著  的值
    private float mMaxValue = 200;        // 最大數(shù)值
    private float mMinValue = 100.0f;     //最小的數(shù)值
    private float mPerValue = 1;          //最小單位  如 1:表示 每2條刻度差為1.   0.1:表示 每2條刻度差為0.1
                                          // 在demo中 身高mPerValue為1  體重mPerValue 為0.1

    private float mLineSpaceWidth = 5;    //  尺子刻度2條線之間的距離
    private float mLineWidth = 4;         //  尺子刻度的寬度
    private float mLineMaxHeight = 420;   //  尺子刻度分為3中不同的高度。 mLineMaxHeight表示最長的那根(也就是 10的倍數(shù)時(shí)的高度)
    private float mLineMidHeight = 30;    //  mLineMidHeight  表示中間的高度(也就是 5  15 25 等時(shí)的高度)
    private float mLineMinHeight = 17;    //  mLineMinHeight  表示最短的那個(gè)高度(也就是 1 2 3 4 等時(shí)的高度)

    private float mTextMarginTop = 10;    //o
    private float mTextSize =30;         //尺子刻度下方數(shù)字 textsize

    private boolean mAlphaEnable = false;  // 尺子 最左邊 最后邊是否需要透明 (透明效果更好點(diǎn))

    private float mTextHeight;            //尺子刻度下方數(shù)字  的高度

    private Paint mTextPaint;             // 尺子刻度下方數(shù)字( 也就是每隔10個(gè)出現(xiàn)的數(shù)值) paint
    private Paint mLinePaint;             //  尺子刻度  paint

    private int mTotalLine;               //共有多少條 刻度
    private int mMaxOffset;               //所有刻度 共有多長
    private float mOffset;                // 默認(rèn)狀態(tài)下网梢,mSelectorValue所在的位置  位于尺子總刻度的位置
    private int mLastX, mMove;
    private OnValueChangeListener mListener;  // 滑動(dòng)后數(shù)值回調(diào)

github地址:https://github.com/panacena/RuleView

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末震缭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子战虏,更是在濱河造成了極大的恐慌拣宰,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件活烙,死亡現(xiàn)場離奇詭異徐裸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)啸盏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門重贺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人回懦,你說我怎么就攤上這事气笙。” “怎么了怯晕?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵潜圃,是天一觀的道長。 經(jīng)常有香客問我舟茶,道長谭期,這世上最難降的妖魔是什么堵第? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮隧出,結(jié)果婚禮上踏志,老公的妹妹穿的比我還像新娘。我一直安慰自己胀瞪,他們只是感情好针余,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凄诞,像睡著了一般圆雁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上帆谍,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天伪朽,我揣著相機(jī)與錄音,去河邊找鬼汛蝙。 笑死驱负,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的患雇。 我是一名探鬼主播跃脊,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼苛吱!你這毒婦竟也來了酪术?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤翠储,失蹤者是張志新(化名)和其女友劉穎绘雁,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體援所,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庐舟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了住拭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挪略。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖滔岳,靈堂內(nèi)的尸體忽然破棺而出杠娱,到底是詐尸還是另有隱情,我是刑警寧澤谱煤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布摊求,位于F島的核電站,受9級(jí)特大地震影響刘离,放射性物質(zhì)發(fā)生泄漏室叉。R本人自食惡果不足惜睹栖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望茧痕。 院中可真熱鬧磨淌,春花似錦、人聲如沸凿渊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽埃脏。三九已至,卻和暖如春秋忙,著一層夾襖步出監(jiān)牢的瞬間彩掐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工灰追, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留堵幽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓弹澎,卻偏偏與公主長得像朴下,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子苦蒿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容