如何在自定义视图

时间:2016-05-31 19:12:18

标签: java android canvas android-canvas android-custom-view

我在画布上创建了一个自定义视图宽度网格绘图。现在我的网格行和列计数取决于实际的网格宽度和高度以及固定的单元格大小(16dp)。 因此,如果我有网格宽度= 160dp和高度= 192dp,那么将有10个cols和12个行。但是当我有宽度时,例如168,那么最后一个col会稍微大一些(8dp),就像下面的图片的最后一行一样。 enter image description here

这是我的代码:

public class MyGrid extends View
{
    private static final int CELL_SIZE=16;
    private int mHeight;
    private int mWidth;

    public MyGrid(Context context, AttributeSet attrs) {
        super(context, attrs);
        setFocusable(true);
    }

    // getting sizes in onLayout becouse there is no sizes in constractor
    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        int mWidth=getWidth()/CELL_SIZE;
        int mHeight=getHeight()/CELL_SIZE;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        Paint background = new Paint();
        background.setColor(getResources().getColor(R.color.background_color));
        canvas.drawRect(0, 0, getWidth(), getHeight(), background);

        drawBorders(canvas);
    }

    private void drawBorders(Canvas canvas)
    {
        Paint line=new Paint();
        line.setColor(getResources().getColor(R.color.line_color));
        line.setStyle(Paint.Style.STROKE);
        line.setStrokeWidth(1);
        // verical
        for(int i=0; i<mWidth; i++)
            canvas.drawLine(i*CELL_SIZE, 0, i*CELL_SIZE, getHeight(), line);
        // horizontal
        for(int i=0; i<mHeight; i++)
            canvas.drawLine(0, i*CELL_SIZE, getWidth(), i*CELL_SIZE, line);
    }
}

如何使我的上一个cols和行的大小相同?

1 个答案:

答案 0 :(得分:0)

实际上,从您的代码判断,最后一行应该更大,而不是列。 168/16 = 10.5,垂直线将被绘制10次,因此最后一行应该更宽,因为它由最后一行(x = 144)和画布边界(x = 168)界定,并且宽度= 22dp。如果所需的单元格大小固定(16dp),除非画布宽度和高度可以被16整除,否则不能使它们具有相同的大小。