2013-09-02 5 views
0

peut me aider à créer l'image Balow Cutomize barre de recherche je suis déjà aller throught SeekBar with custom thumb and segmented text et SeekBar Thumb position issueCréer personnalisé Seekbar dans Android

mais je ne suis pas le succès pour créer mon custume seekbar pls me aider

Images is here

+0

Pouvez-vous envoyer votre code? Quel est le problème? Y at-il des erreurs? Pouvez-vous les poster aussi et un logcat. Sans eux, nous n'avons aucune idée de ce qui ne va pas. – RossC

+0

thanx RossC, je veux créer seekbar comme ci-dessus, comment puis-je créer cela? Je ne reçois aucune erreur donc qui vous aide, mais je ne reçois pas la sortie requise, pouvez-vous avoir un exemple de code ou un lien qui m'aide que s'il vous plaît fournir encore merci .. –

+0

Ok, je ne peux pas vraiment faire autre chose que le lien à 'SeekBar' et laissez-vous courir avec ça. Si vous n'avez rien essayé, que puis-je faire? http://stackoverflow.com/questions/16163215/android-styling-seek-bar – RossC

Répondre

10

utilisation Bibliothèque De ce lien: This link et de mettre dans votre projet,

maintenant Créer un Seekbar Comme cette classe:

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; 
public class DemoSeek extends AbsVerticalSeekBar { 
    public interface OnSeekBarChangeListener { 
     void onProgressChanged(DemoSeek seekBar, int progress, boolean fromUser); 

    void onStartTrackingTouch(DemoSeek seekBar); 

    void onStopTrackingTouch(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; 

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

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

    labelBackground = drawableToBitmap(mThumb); 

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

    labelBackgroundPaint = new Paint(); 

    barBounds = new Rect(); 
    labelTextRect = new Rect(); 

    labelPos = new Point(); 

} 

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

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

    return bitmap; 
} 

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

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

public DemoSeek(Context context, AttributeSet attrs) { 
    super(context, attrs); 

    progressDrawable = getProgressDrawable(); 

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

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

    labelBackgroundPaint = new Paint(); 

    barBounds = new Rect(); 
    labelTextRect = new Rect(); 

    labelPos = new Point(); 
} 

@Override 
protected void onMeasure(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); 
    } 

} 

@Override 
protected void onDraw(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); 

     String pro = 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(); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    invalidate(); 
    return super.onTouchEvent(event); 

} 

public void setOnSeekBarChangeListener(
     com.tokaracamara.android.verticalslidevar.DemoSeek.OnSeekBarChangeListener onSeekBarChangeListener) { 
    mOnSeekBarChangeListener = (OnSeekBarChangeListener) onSeekBarChangeListener; 
} 

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

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


private int multiplier = 1; 

public void setMultiplier(int multiplier) { 
    this.multiplier = multiplier; 
} 

public int getMultiplier() { 
    return multiplier; 
} 

public void setExpression(String expression) { 
    this.expression = expression.trim(); 
} 

public String getExpression() { 
    return expression; 
} 

}

Créer Xml comme ceci:

<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" /> 
+0

Ceci est un code fonctionnant. par erreur, j'ai voté.Lorsque je vote, cela dit: "Vous avez voté pour la dernière fois il y a 16 heures, votre vote est maintenant verrouillé sauf si cette réponse est éditée.". @Kishan pouvez-vous modifier la réponse. Merci – Thushara

+0

voir edit @tushara. – Kishan