繁体   English   中英

Android Canvas drawLine无法在MainActivity上绘制

[英]Android Canvas drawLine not drawing on MainActivity

我想使用Canvas在Main Activity上画一条线。 问题是,它没有画任何东西。 我有以下代码:

 Bitmap bitmap = Bitmap.createBitmap(1920, 1080, Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setStrokeWidth(10);

float left = 20;
float top = 20;
float right = 50;
float bottom = 100;

canvas.drawLine(left, top, right, bottom, paint);

您可以像这样显示位图:

canvas.drawBitmap(bmp, positionX, positionY, paint);

在您的情况下,您可以尝试以下操作:

canvas.drawBitmap(bitmap, 0, 0, null);

但您需要使用其他画布。 允许您在屏幕上绘制内容的画布将被传递到View中的onDraw()方法。 因此,您需要首先创建一个View类并将其添加到MainActivity中。

您可以这样进行:首先创建一个名为MyView的类,然后将以下代码添加到其中:

public class MyView extends View {

    Bitmap bitmap;

    public MyView(Context context) {
        bitmap = Bitmap.createBitmap(1920, 1080, Bitmap.Config.ARGB_8888);

        Canvas canvas = new Canvas(bitmap);
        Paint paint = new Paint();
        paint.setColor(Color.BLACK);
        paint.setStyle(Paint.Style.FILL_AND_STROKE);
        paint.setStrokeWidth(10);

        float left = 20;
        float top = 20;
        float right = 50;
        float bottom = 100;

        canvas.drawLine(left, top, right, bottom, paint);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawBitmap(bitmap, 0, 0, null);
        super.onDraw(canvas);
    }
}

然后在MainActivity的onCreate()方法中将代码更改为此:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);  

    MyView myView = new MyView(this);
    setContentView(myView);
}

创建这样的课程

public class MyView extends View {
public MyView(Context context) {
    super(context);
}

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

public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

@Override
protected void onDraw(Canvas canvas) {
    Paint paint = new Paint();
    paint.setColor(Color.BLACK);
    paint.setStyle(Paint.Style.FILL_AND_STROKE);
    paint.setStrokeWidth(10);

    float left = 20;
    float top = 20;
    float right = 50;
    float bottom = 100;

    canvas.drawLine(left, top, right, bottom, paint);
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM