Skip to content Skip to sidebar Skip to footer

Create Custom Seekbar In Android

can any one help me to create balow image cutomize seek bar i have already go throught SeekBar with custom thumb and segmented text and SeekBar Thumb position issue but i am not

Solution 1:

Use Library From This Link: This link and put into your project,

Now Create A Seekbar Like This Class:

package com.tokaracamara.android.verticalslidevar;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
publicclassDemoSeekextendsAbsVerticalSeekBar {
    publicinterfaceOnSeekBarChangeListener {
        voidonProgressChanged(DemoSeek seekBar, int progress, boolean fromUser);

    voidonStartTrackingTouch(DemoSeek seekBar);

    voidonStopTrackingTouch(DemoSeek seekBar);
}

private OnSeekBarChangeListener mOnSeekBarChangeListener;

private Drawable progressDrawable;
private Rect barBounds, labelTextRect;
private Bitmap labelBackground;
private Point labelPos;
private Paint labelTextPaint, labelBackgroundPaint;

int viewWidth, barHeight, labelOffset;
//    private int thumbX;float progressPosX;
private String expression;

publicDemoSeek(Context context) {
    super(context);
    // Log.i("Seekbar", "DemoSeek");
    progressDrawable = getProgressDrawable();

    // labelBackground = BitmapFactory.decodeResource(getResources(),// R.drawable.thumb_marker);

    labelBackground = drawableToBitmap(mThumb);

    labelTextPaint = newPaint();
    labelTextPaint.setColor(Color.WHITE);
    labelTextPaint.setTypeface(Typeface.DEFAULT_BOLD);
    labelTextPaint.setAntiAlias(true);
    labelTextPaint.setDither(true);
    labelTextPaint.setTextSize(13f);

    labelBackgroundPaint = newPaint();

    barBounds = newRect();
    labelTextRect = newRect();

    labelPos = newPoint();

}

public Bitmap drawableToBitmap(Drawable drawable) {
    if (drawable instanceof BitmapDrawable) {
        return ((BitmapDrawable) drawable).getBitmap();
    }

    Bitmapbitmap= Bitmap.createBitmap(drawable.getIntrinsicWidth(),
            drawable.getIntrinsicHeight(), Config.ARGB_8888);
    Canvascanvas=newCanvas(bitmap);
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    drawable.draw(canvas);

    return bitmap;
}

@OverridevoidonProgressRefresh(float scale, boolean fromUser) {
    super.onProgressRefresh(scale, fromUser);

    if (mOnSeekBarChangeListener != null) {
        mOnSeekBarChangeListener.onProgressChanged(this, getProgress(),
                fromUser);
    }
}

publicDemoSeek(Context context, AttributeSet attrs) {
    super(context, attrs);

    progressDrawable = getProgressDrawable();

    labelBackground = BitmapFactory.decodeResource(getResources(),
            R.drawable.thumb_with_arrow);

    labelTextPaint = newPaint();
    labelTextPaint.setColor(Color.WHITE);
    labelTextPaint.setTypeface(Typeface.DEFAULT_BOLD);
    labelTextPaint.setAntiAlias(true);
    labelTextPaint.setDither(true);
    labelTextPaint.setTextSize(15f);

    labelBackgroundPaint = newPaint();

    barBounds = newRect();
    labelTextRect = newRect();

    labelPos = newPoint();
}

@OverrideprotectedvoidonMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    // Log.i("Seekbar", "onMeasure");if (labelBackground != null) {

        viewWidth = getMeasuredWidth();
        barHeight = getMeasuredHeight() - getPaddingTop()
                - getPaddingBottom();
        setMeasuredDimension(viewWidth + labelBackground.getWidth(),
                barHeight + labelBackground.getHeight() / 2);
    }

}

@OverrideprotectedvoidonDraw(Canvas canvas) {
    canvas.save();
    if (labelBackground != null) {
        barBounds.left = getPaddingLeft();
        barBounds.top = (int) (labelBackground.getHeight() / 2f);
        barBounds.right = barBounds.left + viewWidth - getPaddingRight()
                - getPaddingLeft();
        barBounds.bottom = barBounds.top + barHeight - getPaddingBottom()
                - getPaddingTop();

        progressPosX = barBounds.top
                + ((float) this.getProgress() / (float) this.getMax())
                * barBounds.height() + getTopPaddingOffset();

        labelPos.y = getBottom() - (int) progressPosX - labelOffset
                + (int) (getProgress() * 0.1f);
        labelPos.x = getPaddingLeft();

        progressDrawable = getProgressDrawable();

        progressDrawable.setBounds(barBounds.left, barBounds.top,
                barBounds.right, getBottom());

        progressDrawable.draw(canvas);

        Stringpro= getProgress() * multiplier + "";
        if (expression != null) {
            pro = pro.concat(expression);
        }
        labelTextPaint.getTextBounds(pro, 0, pro.length(), labelTextRect);

        canvas.drawBitmap(labelBackground, labelPos.x, labelPos.y,
                labelBackgroundPaint);

        canvas.drawText(pro, labelPos.x + labelBackground.getWidth() / 2
                - labelTextRect.width() / 2 + 15, labelPos.y
                + labelBackground.getHeight() / 2 + labelTextRect.height()
                / 2 - 5, labelTextPaint);

    }
    canvas.restore();
}

@OverridepublicbooleanonTouchEvent(MotionEvent event) {
    invalidate();
    returnsuper.onTouchEvent(event);

}

publicvoidsetOnSeekBarChangeListener(
        com.tokaracamara.android.verticalslidevar.DemoSeek.OnSeekBarChangeListener onSeekBarChangeListener) {
    mOnSeekBarChangeListener = (OnSeekBarChangeListener) onSeekBarChangeListener;
}

@OverridevoidonStartTrackingTouch() {
    if (mOnSeekBarChangeListener != null) {
        mOnSeekBarChangeListener.onStartTrackingTouch(this);
    }
}

@OverridevoidonStopTrackingTouch() {
    if (mOnSeekBarChangeListener != null) {
        mOnSeekBarChangeListener.onStopTrackingTouch(this);
    }
}


privateintmultiplier=1;

publicvoidsetMultiplier(int multiplier) {
    this.multiplier = multiplier;
}

publicintgetMultiplier() {
    return multiplier;
}

publicvoidsetExpression(String expression) {
    this.expression = expression.trim();
}

public String getExpression() {
    return expression;
}

}

Create Xml Like This:

<com.tokaracamara.android.verticalslidevar.DemoSeek
            android:id="@+id/v_four_university"
            android:layout_width="@dimen/vs_width"
            android:layout_height="match_parent"
            android:clickable="false"
            android:focusable="false"
            android:longClickable="false"
            android:progress="50"
            android:progressDrawable="@drawable/progress_vertical"
            android:saveEnabled="false"
            android:thumb="@drawable/your thumb" />

Post a Comment for "Create Custom Seekbar In Android"