如何使视图透明/仅在Android Studio中显示图形?

问题描述

我有一个名为DrawView的类,它扩展了View并在TableLayout的顶部。我正在使用此类使用drawLine()方法绘制1条简单的线。我的TableLayout类位于其上方,因此我的DrawView处于透支状态。我该如何预防?我的行需要放在TableLayout的上方,该行未使用整个画布,因此我认为将背景设置为透明会解决问题,

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class DrawView extends View {
    private final Paint paint = new Paint();
    private static int orientation;
    private static int pos;
    public static final int HORIZONTAL = 1;
    public static final int VERTICAL = 2;
    public static final int DIAGONAL = 3;
    public static final int TOP_LEFT = 4;
    public static final int TOP_RIGHT = 5;

    private void init() {
        paint.setColor(Color.BLACK);
        paint.setstrokeWidth(25f);
        paint.setAntiAlias(true);
    }

    public DrawView(Context context) {
        super(context);
        init();
    }

    public DrawView(Context context,AttributeSet attrs) {
        super(context,attrs);
        init();
    }

    public DrawView(Context context,AttributeSet attrs,int defStyle) {
        super(context,attrs,defStyle);
        init();
    }

    public static void setorientation(int newOrientation) {
        orientation = newOrientation;
    }

    public static void setPosition(int newPosition) {
        pos = newPosition;
    }

    @Override
    public void onDraw(Canvas canvas) {
        final int INDENT = 147;
        canvas.drawColor(Color.TRANSPARENT);
        switch (orientation) {
            case HORIZONTAL:
                switch (pos) {
                    case 0:
                        canvas.drawLine(10,INDENT,getWidth() - 10,paint);
                        break;
                    case 1:
                        canvas.drawLine(10,INDENT * 3,paint);
                        break;
                    case 2:
                        canvas.drawLine(10,INDENT * 5,paint);
                        break;
                }
                break;
            case VERTICAL:
                switch (pos) {
                    case 0:
                        canvas.drawLine(INDENT,10,getHeight() - 10,paint);
                        break;
                    case 1:
                        canvas.drawLine(INDENT * 3,paint);
                        break;
                    case 2:
                        canvas.drawLine(INDENT * 5,paint);
                        break;
                }
                break;
            case DIAGONAL:
                if (pos == TOP_LEFT) {
                    canvas.drawLine(10,paint);
                } else if (pos == TOP_RIGHT) {
                    canvas.drawLine(10,paint);
                }
                break;
        }
    }

}

该视图也是不可见的,直到我调用方法

public void displayResult(int result) {
        // Todo: Fix board being overdrawn by DrawView
        DrawView drawView = new DrawView(this);
        //drawView.setBackgroundColor(Color.TRANSPARENT);
        drawView.setVisibility(View.VISIBLE);
        /*...*/
    }

但是它仍然透支了我的TableLayout。 如果DrawView在TableLayout下,这就是我的布局的样子,因为人们可能猜测不会显示任何行:

Layout with DrawView under TableLayout

如果DrawView在TableLayout上方,这就是我的布局的样子,这样我得到的线条带有白色背景,完全覆盖了TableLayout:

Layout with DrawView above TableLayout

如何确定仅画出了没有白色背景的线条?

解决方法

令我感到遗憾的是,视图(DrawView)所在的布局背景被设置为白色。因此,我的视图也有一块白色的画布,从而覆盖了我的TableLayout。

虽然这可能是一个难以理解的答案,但它可能会帮助将来遇到这种情况的人。

检查布局的背景。