【问题标题】:Android Draw Circle with Different TextAndroid 用不同的文字画圆
【发布时间】:2017-02-18 04:28:39
【问题描述】:

当屏幕被按下时,我的应用程序会画一个圆圈。我正在尝试根据屏幕的数量在圆圈上放置文字。因此,如果您的第一次点击会给您一个带有文本 C0 的圆圈,那么第二次点击会给您一个带有 C1 的圆圈,依此类推。

目前我的代码看起来像

lPaint = new Paint();
lPaint.setColor(Color.WHITE);
lPaint.setTextAlign(Paint.Align.CENTER);
lPaint.setTextSize(40);

nCanvas.drawCircle(v.x, v.y, 55, cPaint);
nCanvas.drawText("C"+i, v.x, v.y, lPaint);

其中 v.x 和 v.y 是您触摸屏幕的坐标,而 i 是圆形计数器。这段代码一开始就很好,但是在第一次绘制圆之后,它将所有圆的所有文本更改为新的 i 值。我该如何解决这个问题?

谢谢

【问题讨论】:

    标签: android canvas


    【解决方案1】:

    只需在自定义视图中创建一个新变量 i。然后在点击时增加变量 i ,在 onDraw 方法中只画圆,或者你想要的任何东西。例如:

    package yourpackage.
    
    import android.annotation.TargetApi;
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Paint;
    import android.os.Build;
    import android.support.v4.content.ContextCompat;
    import android.util.AttributeSet;
    import android.view.View;
    
    /**
     * Color view used for picking color for drawing
     */
    public class ColorView extends View {
    
        private Paint drawPaint;
        private int color = ContextCompat.getColor(getContext(), android.R.color.black);
        private int i;
    
    
        public ColorView(Context context) {
            this(context, null);
        }
    
        public ColorView(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }
    
        public ColorView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            init();
        }
    
        @TargetApi(Build.VERSION_CODES.LOLLIPOP)
        public ColorView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
            super(context, attrs, defStyleAttr, defStyleRes);
            init();
        }
    
        private void init() {
            drawPaint = new Paint();
            drawPaint.setAntiAlias(true);
            drawPaint.setColor(color);
            drawPaint.setStyle(Paint.Style.FILL);
            drawPaint.setStrokeJoin(Paint.Join.ROUND);
            drawPaint.setStrokeCap(Paint.Cap.ROUND);
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            canvas.drawRect(0, 0, 100, 200, drawPaint);
        }
    
        public void setColor(int color) {
            drawPaint.setColor(color);
            this.color = color;
        }
    
        public void onClick() {
            i++;
        }
    
        public int getColor() {
            return color;
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多