2016-09-06 3 views
0

대체 스팬이있는 텍스트보기에서 카운트 배지와 같은 효과를 얻으려고합니다. 나는 drawable (xml에 정의 된 원)을 배경으로 사용하고 있는데, canvas.drawCircle 메소드가 작동하지 않는 것처럼 보입니다. 그러나이 드로어 블 위에 텍스트를 그리기를 원하지만, 나는 무엇을 시도하든 절대로 나타나지 않습니다. 문제가 무엇인지 알 수있는 사람이 있습니까?Android : 대체 스팬에 텍스트가 표시되지 않음

내 사용자 교체 스팬 클래스 :

public class CircleBackgroundSpan extends ReplacementSpan { 
    private Drawable circle; 

    public CircleBackgroundSpan(Drawable drawable) 
    { 
     circle = drawable; 
    } 

    @Override 
    public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) { 

     int textWidth = Math.round(measureText(paint, text, start, end)); 
     return Math.max(textWidth, circle.getIntrinsicWidth()); 
    } 

    @Override 
    public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) { 
     Rect bounds = new Rect(); 
     circle.setBounds((int) x, top, (int) x + circle.getIntrinsicWidth(), top + circle.getIntrinsicHeight()); 
     circle.draw(canvas); 
     paint.setColor(0x0000A8); 
     paint.setStyle(Paint.Style.FILL_AND_STROKE); 
     paint.setTextAlign(Paint.Align.CENTER); 
     paint.setTextSize(16); 
     paint.getTextBounds(text.toString(), 0, text.subSequence(start, end).length(), bounds); 
     canvas.drawText(text, start, end, x + circle.getIntrinsicWidth()/2f , y, paint); 
    } 

    private float measureText(Paint paint, CharSequence text, int start, int end) 
    { 
     return paint.measureText(text, start, end); 
    } 

} 

사용법 :

SpannableString spannableString = new SpannableString(selected+" items selected"); 
String numberString = String.valueOf(selected); 
spannableString.setSpan(new CircleBackgroundSpan(getResources().getDrawable(R.drawable.multiselect_circle)), 0, numberString.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
multiselect.setText(spannableString, TextView.BufferType.SPANNABLE); 

그리고 결과 :이 같은 것을 얻기 위해 노력하고

enter image description here

:

enter image description here

아이디어가 있으십니까?

답변

0

페인트 색상을 설정하는 데 문제가 있음이 드러났습니다. paint.setColor(0x0000A8)paint.setColor(Color.parseColor("#0000A8")으로 변경하면 텍스트가 표시되었습니다.

관련 문제