2016-05-14 7 views
1

TextViewの左側とテキストの間の距離を取得しようとしています。プロパティandroid:gravity="center"を使用します。TextViewの境界とテキストの間のスペースを取得

enter image description here

私は青色のボタンを中央に(この赤いバーは、レイアウトの一部ではありません)赤いバーの距離を取得したいです。私は何をすべきか? 暗い領域はTextViewの境界を表します。

このビューはボタンの色をランダムに変更するため、compoundDrawableは使用しません。

(Kotlinで書かれた)ビューのコード:

class BallTextView: TextView { 

    private lateinit var ballPaint : Paint 
    private var ballRadius : Float = 10f 
    private var ballColor : Int = Color.BLACK 

    constructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs) { 
    initializeAttributes(attrs) 
    configBall() 
    } 

    override fun onDraw(canvas: Canvas) { 
    canvas.drawCircle(ballRadius, height.toFloat()/2, ballRadius, ballPaint) 
    super.onDraw(canvas) 
    } 

    fun configBall() { 
    ballPaint = Paint() 
    ballPaint.isAntiAlias = true 
    ballPaint.color = ballColor 
    } 

    fun initializeAttributes(attrs: AttributeSet) { 
    val attributes = context.obtainStyledAttributes(attrs, R.styleable.ball_textview) 
    ballRadius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
     attributes.getFloat(R.styleable.ball_textview_ball_radius, ballRadius), 
     context.resources.displayMetrics) 
    ballColor = attributes.getColor(R.styleable.ball_textview_ball_color, ballColor) 
    } 

} 

おかげ。

+0

あなたのXMLコードを投稿してください – Pranita

+1

XMLはここで違いはありません。 –

+1

'getLineBounds()'メソッドをチェックしてください。 2番目の引数として渡す 'Rect'は、呼び出しの後に' left'フィールドの値として水平なインセットを持ちます。 –

答えて

1

TextView#getLineBounds(int, Rect)メソッドが必要です。

最初のパラメータは0から始まる行番号で、2番目のパラメータはRectオブジェクトで、コール後に指定された行の境界値を保持します。 Rectleftフィールドには線の水平挿入図が表示されます。これは描画された円の半径とともに使用して、その中心のx座標を求めることができます。

2

私のもう一つのソリューションでした:

override fun onDraw(canvas: Canvas) { 
    if (xPosition == 0f) { 
     xPosition = (width - paint.measureText(text.toString()))/3 
    } 
    canvas.drawCircle(xPosition, height.toFloat()/2, ballRadius, ballPaint) 
    super.onDraw(canvas) 
    } 

@MikeM。このアプローチについてどう思いますか?

+0

ああ、ちょっと。ええ、何でもうまくいく。違いを3で割った理由は分かりませんが、ユースケースの調整がうまくいっていると思います。ちょうど参考にして、@usernameのことは答えの中で、コメントの中だけでは機能しません。 Anyhoo、あなたはそれが働いてうれしい。乾杯! –

関連する問題