如何使您的视图透明/仅显示 Android Studio 中的绘图?
How to make your view transparent / display only the drawing in Android Studio?
我有一个名为 DrawView
的 class,它扩展 View
并位于 TableLayout
之上。我正在使用 class 使用 drawLine()
方法绘制 1 条简单的线。我的 TableLayout
被透支了,因为我的 DrawView
class 在上面。我怎样才能防止这种情况发生?我的线需要在 TableLayout
之上,表示线没有使用整个 canvas,所以我认为将背景设置为透明可以修复它,但事实并非如此。
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, INDENT, paint);
break;
case 1:
canvas.drawLine(10, INDENT * 3, getWidth() - 10, INDENT * 3, paint);
break;
case 2:
canvas.drawLine(10, INDENT * 5, getWidth() - 10, INDENT * 5, paint);
break;
}
break;
case VERTICAL:
switch (pos) {
case 0:
canvas.drawLine(INDENT, 10, INDENT, getHeight() - 10, paint);
break;
case 1:
canvas.drawLine(INDENT * 3, 10, INDENT * 3, getHeight() - 10, paint);
break;
case 2:
canvas.drawLine(INDENT * 5, 10, INDENT * 5, getHeight() - 10, paint);
break;
}
break;
case DIAGONAL:
if (pos == TOP_LEFT) {
canvas.drawLine(10, 10, getWidth() - 10, getHeight() - 10, paint);
} else if (pos == TOP_RIGHT) {
canvas.drawLine(10, getHeight() - 10, getWidth() - 10, 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 下,这就是我的布局的样子,因为可以猜到不会显示任何行:
如果 DrawView 在 TableLayout 之上,这就是我的布局的样子,这样我得到一条白色背景的线,它完全透支了我的 TableLayout:
如何确保只画线而没有白底?
令我遗憾的是,我的视图 (DrawView
) 所在的布局背景被设置为白色。因此我的视图也有一个白色 canvas,从而透支了我的 TableLayout。
虽然这可能是一个平淡无奇的答案,但它可能会对将来出现这种情况的人有所帮助。
检查布局的背景。
我有一个名为 DrawView
的 class,它扩展 View
并位于 TableLayout
之上。我正在使用 class 使用 drawLine()
方法绘制 1 条简单的线。我的 TableLayout
被透支了,因为我的 DrawView
class 在上面。我怎样才能防止这种情况发生?我的线需要在 TableLayout
之上,表示线没有使用整个 canvas,所以我认为将背景设置为透明可以修复它,但事实并非如此。
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, INDENT, paint);
break;
case 1:
canvas.drawLine(10, INDENT * 3, getWidth() - 10, INDENT * 3, paint);
break;
case 2:
canvas.drawLine(10, INDENT * 5, getWidth() - 10, INDENT * 5, paint);
break;
}
break;
case VERTICAL:
switch (pos) {
case 0:
canvas.drawLine(INDENT, 10, INDENT, getHeight() - 10, paint);
break;
case 1:
canvas.drawLine(INDENT * 3, 10, INDENT * 3, getHeight() - 10, paint);
break;
case 2:
canvas.drawLine(INDENT * 5, 10, INDENT * 5, getHeight() - 10, paint);
break;
}
break;
case DIAGONAL:
if (pos == TOP_LEFT) {
canvas.drawLine(10, 10, getWidth() - 10, getHeight() - 10, paint);
} else if (pos == TOP_RIGHT) {
canvas.drawLine(10, getHeight() - 10, getWidth() - 10, 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 下,这就是我的布局的样子,因为可以猜到不会显示任何行:
如果 DrawView 在 TableLayout 之上,这就是我的布局的样子,这样我得到一条白色背景的线,它完全透支了我的 TableLayout:
如何确保只画线而没有白底?
令我遗憾的是,我的视图 (DrawView
) 所在的布局背景被设置为白色。因此我的视图也有一个白色 canvas,从而透支了我的 TableLayout。
虽然这可能是一个平淡无奇的答案,但它可能会对将来出现这种情况的人有所帮助。
检查布局的背景。