亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android自定義Seekbar滑動條,Pop提示跟隨滑動按鈕一起滑動

2019-11-09 18:30:33
字體:
來源:轉載
供稿:網友

由于項目需要做出此效果,自定義寫了一個。

效果圖

這里寫圖片描述

思路:

原始的seekbar只有滑動條并沒有下方的提示文字,所以我們必須要繼承Seekbar重寫這個控件。

代碼:

在values文件夾下新建attrs.xml,用于設置跟隨滑動按鈕的文字大小,顏色,背景。

<declare-styleable name="MySeekBar">        <attr name="textsize" format="dimension" />        <attr name="textcolor" format="color" />        <attr name="img" format="reference" /></declare-styleable>1234512345

在布局里引用此控件

 <com.jzh.myseekbar.MySeekBar            android:id="@+id/seekBar"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_weight="1"            android:max="80"            android:maxHeight="10dp"            android:PRogress="0"            android:progressDrawable="@drawable/seekbar_style"             android:splitTrack="false"            android:thumb="@mipmap/niu"            app:img="@mipmap/ann"            app:textcolor="#fff"            app:textsize="14dp" />12345678910111213141234567891011121314

自定義控件樣式

<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android">    <item android:id="@android:id/background">        <shape>            <corners android:radius="5dp" />            <gradient                android:angle="0"                android:centerColor="@android:color/holo_orange_dark"                android:endColor="@android:color/holo_red_dark"                android:startColor="#2aade3" />        </shape>    </item></layer-list>12345678910111213141516171234567891011121314151617

主要核心代碼

/**     * 文本的顏色     */    private int mTitleTextColor;    /**     * 文本的大小     */    private float mTitleTextSize;    private String mTitleText;//文字的內容    /**     * 背景圖片     */    private int img;    private Bitmap map;    //bitmap對應的寬高    private float img_width, img_height;    Paint paint;    private float numTextWidth;    //測量seekbar的規格    private Rect rect_seek;    private Paint.FontMetrics fm;    public static final int TEXT_ALIGN_LEFT = 0x00000001;    public static final int TEXT_ALIGN_RIGHT = 0x00000010;    public static final int TEXT_ALIGN_CENTER_VERTICAL = 0x00000100;    public static final int TEXT_ALIGN_CENTER_HORIZONTAL = 0x00001000;    public static final int TEXT_ALIGN_TOP = 0x00010000;    public static final int TEXT_ALIGN_BOTTOM = 0x00100000;    /**     * 文本中軸線X坐標     */    private float textCenterX;    /**     * 文本baseline線Y坐標     */    private float textBaselineY;    /**     * 文字的方位     */    private int textAlign;    public MySeekBar(Context context) {        this(context, null);    }    public MySeekBar(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    public MySeekBar(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        TypedArray array = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MySeekBar, defStyleAttr, 0);        int n = array.getIndexCount();        for (int i = 0; i < n; i++) {            int attr = array.getIndex(i);            switch (attr) {                case R.styleable.MySeekBar_textsize:                    mTitleTextSize = array.getDimension(attr, 15f);                    break;                case R.styleable.MySeekBar_textcolor:                    mTitleTextColor = array.getColor(attr, Color.WHITE);                    break;                case R.styleable.MySeekBar_img:                    img = array.getResourceId(attr, R.mipmap.ic_launcher);                    break;            }        }        array.recycle();        getImgWH();        paint = new Paint();        paint.setAntiAlias(true);//設置抗鋸齒        paint.setTextSize(mTitleTextSize);//設置文字大小        paint.setColor(mTitleTextColor);//設置文字顏色        //設置控件的padding 給提示文字留出位置        setPadding((int) Math.ceil(img_width) / 2, 0, (int) Math.ceil(img_height) / 2, (int) Math.ceil(img_height) + 10);        textAlign = TEXT_ALIGN_CENTER_HORIZONTAL | TEXT_ALIGN_CENTER_VERTICAL;    }    /**     * 獲取圖片的寬高     */    private void getImgWH() {        map = BitmapFactory.decodeResource(getResources(), img);        img_width = map.getWidth();        img_height = map.getHeight();    }    @Override    protected synchronized void onDraw(Canvas canvas) {        super.onDraw(canvas);        setTextLocation();//定位文本繪制的位置        rect_seek = this.getProgressDrawable().getBounds();        //定位文字背景圖片的位置        float bm_x = rect_seek.width() * getProgress() / getMax();        float bm_y = rect_seek.height() + 20;//        //計算文字的中心位置在bitmap        float text_x = rect_seek.width() * getProgress() / getMax() + (img_width - numTextWidth) / 2;        canvas.drawBitmap(map, bm_x, bm_y, paint);//畫背景圖        // canvas.drawRoundRect();        canvas.drawText(mTitleText, text_x, (float) (textBaselineY + bm_y + (0.16 * img_height / 2)), paint);//畫文字    }    @Override    public boolean onTouchEvent(MotionEvent event) {        invalidate();//監聽手勢滑動,不斷重繪文字和背景圖的顯示位置        return super.onTouchEvent(event);    }    /**     * 定位文本繪制的位置     */    private void setTextLocation() {        fm = paint.getFontMetrics();        //文本的寬度        mTitleText = getProgress() + 10 + "℃";        numTextWidth = paint.measureText(mTitleText);        float textCenterVerticalBaselineY = img_height / 2 - fm.descent + (fm.descent - fm.ascent) / 2;        switch (textAlign) {            case TEXT_ALIGN_CENTER_HORIZONTAL | TEXT_ALIGN_CENTER_VERTICAL:                textCenterX = img_width / 2;                textBaselineY = textCenterVerticalBaselineY;                break;            case TEXT_ALIGN_LEFT | TEXT_ALIGN_CENTER_VERTICAL:                textCenterX = numTextWidth / 2;                textBaselineY = textCenterVerticalBaselineY;                break;            case TEXT_ALIGN_RIGHT | TEXT_ALIGN_CENTER_VERTICAL:                textCenterX = img_width - numTextWidth / 2;                textBaselineY = textCenterVerticalBaselineY;                break;            case TEXT_ALIGN_BOTTOM | TEXT_ALIGN_CENTER_HORIZONTAL:                textCenterX = img_width / 2;                textBaselineY = img_height - fm.bottom;                break;            case TEXT_ALIGN_TOP | TEXT_ALIGN_CENTER_HORIZONTAL:                textCenterX = img_width / 2;                textBaselineY = -fm.ascent;                break;            case TEXT_ALIGN_TOP | TEXT_ALIGN_LEFT:                textCenterX = numTextWidth / 2;                textBaselineY = -fm.ascent;                break;            case TEXT_ALIGN_BOTTOM | TEXT_ALIGN_LEFT:                textCenterX = numTextWidth / 2;                textBaselineY = img_height - fm.bottom;                break;            case TEXT_ALIGN_TOP | TEXT_ALIGN_RIGHT:                textCenterX = img_width - numTextWidth / 2;                textBaselineY = -fm.ascent;                break;            case TEXT_ALIGN_BOTTOM | TEXT_ALIGN_RIGHT:                textCenterX = img_width - numTextWidth / 2;                textBaselineY = img_height - fm.bottom;                break;        }    }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国精产品一区一区三区有限在线| 中文字幕日韩有码| 欧美性猛交丰臀xxxxx网站| 久久亚洲欧美日韩精品专区| 久久久久久亚洲| 高清欧美性猛交xxxx黑人猛交| 超在线视频97| 亚洲国产精品一区二区久| 亚洲福利精品在线| 亚洲精品久久7777777| 国产精品爽爽爽爽爽爽在线观看| 亚洲欧美日韩图片| 亚洲女同性videos| 久久中文字幕视频| 日韩视频在线一区| 亚洲一级黄色片| 久久精品国产一区二区电影| 国产91九色视频| 蜜月aⅴ免费一区二区三区| 久久色免费在线视频| 91色在线观看| 欧美激情videoshd| 日韩中文字幕在线| 欧美精品生活片| 国产日韩在线亚洲字幕中文| 97在线视频免费播放| 欧美大胆在线视频| 国产又爽又黄的激情精品视频| 日韩在线资源网| 欧美成人第一页| 人体精品一二三区| 国产成人一区二| 亚洲精品一区在线观看香蕉| 久久99国产精品自在自在app| 国产精品wwww| 疯狂做受xxxx高潮欧美日本| 国产精品igao视频| 久久久天堂国产精品女人| 日韩精品视频观看| 亚洲а∨天堂久久精品9966| 亚洲一区二区日本| 中文字幕欧美专区| 亚洲国产成人一区| 亚洲a∨日韩av高清在线观看| 欧美成人性色生活仑片| 亚洲香蕉成人av网站在线观看| 亚洲激情 国产| 亚洲电影免费观看高清完整版在线观看| www高清在线视频日韩欧美| 亚洲色图欧美制服丝袜另类第一页| 国产精品久久久久久av| 成人精品久久av网站| 欧美日韩xxx| 午夜免费久久久久| 日韩欧美一区二区在线| 欧美亚洲国产成人精品| 久久精品中文字幕一区| 亚洲一区中文字幕| 国产精品一区二区三区久久| 91久热免费在线视频| 国产精品三级久久久久久电影| 亚洲二区中文字幕| 久久6精品影院| 欧美日韩第一页| 成人激情在线观看| 欧美激情aaaa| 日韩成人在线视频| 亚洲 日韩 国产第一| 亚洲二区在线播放视频| 九九热在线精品视频| 日韩综合视频在线观看| 亚洲电影第1页| 亚洲欧美第一页| 在线观看日韩专区| 欧美精品videossex88| 亚洲男女自偷自拍图片另类| 精品久久中文字幕| 91高潮精品免费porn| 伊人一区二区三区久久精品| 欧美日韩福利视频| 国产成人在线一区二区| 欧美夫妻性生活xx| 日韩亚洲一区二区| 久久999免费视频| 色在人av网站天堂精品| 国产精品亚洲аv天堂网| 亚洲sss综合天堂久久| 96国产粉嫩美女| 久久免费精品日本久久中文字幕| 欧美一区二区影院| 国产一区二区黄| 亚洲精品美女在线观看| 亚洲福利在线观看| 久久久噜噜噜久久| 日韩精品一二三四区| 欧美综合激情网| 亚洲欧美国产精品专区久久| 亚洲美女在线视频| 国产精品久久久久久av福利软件| 国产精品青青在线观看爽香蕉| 欧美电影免费观看高清完整| 青青青国产精品一区二区| 国内精品久久久久久| 亚洲成色777777在线观看影院| 69视频在线免费观看| 北条麻妃一区二区三区中文字幕| 成人欧美一区二区三区在线| 亚洲a∨日韩av高清在线观看| 精品免费在线视频| 国精产品一区一区三区有限在线| 91在线直播亚洲| 欧美乱人伦中文字幕在线| 国产在线观看精品一区二区三区| 国产在线高清精品| 国产精品igao视频| 久久精品国产99国产精品澳门| 亚洲在线观看视频网站| 欧美有码在线观看| 欧美高清理论片| 国产精品高清网站| 久久精品国产69国产精品亚洲| 久久精品国产一区| 美女福利视频一区| 亚洲第一在线视频| 97国产suv精品一区二区62| 91色在线视频| 日韩在线观看高清| 日韩免费在线视频| 国产一区二区在线免费视频| 97色在线视频| 亚洲三级av在线| 久久国产精品久久久久| 色婷婷综合久久久久中文字幕1| 国内精品久久久久久久久| 国产亚洲人成网站在线观看| 韩日精品中文字幕| 国产精品第七十二页| 亚洲另类xxxx| 亚洲第一偷拍网| 国产精品视频白浆免费视频| 日韩男女性生活视频| 奇米4444一区二区三区| 欧美与黑人午夜性猛交久久久| 精品国产一区二区在线| 日韩中文第一页| 欧美自拍视频在线观看| 色午夜这里只有精品| 欧美丝袜第一区| 日韩av免费在线观看| 91精品久久久久久久久不口人| 美日韩精品免费观看视频| 国产自摸综合网| 91在线高清免费观看| 91tv亚洲精品香蕉国产一区7ujn| 国产精品电影观看| 亚洲精品欧美一区二区三区| 亚洲经典中文字幕| 日韩中文有码在线视频| 97精品国产97久久久久久春色| 国产亚洲人成网站在线观看| 亚洲精品国产电影| 亚洲网站在线观看| 91超碰中文字幕久久精品| 国产伦精品免费视频|