Android GridView在一行中绘制其元素

Android GridView在一行中绘制其元素,android,gridview,android-canvas,android-custom-view,Android,Gridview,Android Canvas,Android Custom View,我想在画布上画一个网格视图。我有一个自定义视图,我正在覆盖它的onDraw以实现这一点 @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.save(); canvas.translate(mPosX, mPosY); canvas.scale(mScaleFactor, mScaleFactor); li = (LayoutInflater)mContex

我想在画布上画一个网格视图。我有一个自定义视图,我正在覆盖它的onDraw以实现这一点

@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    canvas.save();
    canvas.translate(mPosX, mPosY);
    canvas.scale(mScaleFactor, mScaleFactor);
    li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    gridView = (GridView)li.inflate(R.layout.activity_main, null);
    gridView.setAdapter(mImageAdapter);
    gridView.setDrawingCacheEnabled(true);
    Bitmap cac = getDrawingCache();
    if(cac != null) {

        canvas.drawBitmap(cac, 0, 0, new Paint());
    } else {

        gridView.measure(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);
        gridView.layout(0, 0, gridView.getMeasuredWidth(), gridView.getMeasuredHeight());
        gridView.draw(canvas);
    }
    canvas.restore();
}
以下是GridView的XML:

将绘制GridView,但所有图像都绘制在一行中。 我想我可能必须覆盖这个GridView上的onMeasure,但我不确定如何继续。请帮帮我

您对
measure()
的调用错误。此方法将“测量规格”作为参数,可以使用
View.MeasureSpec
类构建参数。在您的情况下,您需要的是:

int widthSpec = MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.AT_MOST);
int heightSpec = MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY);
gridView.measure(widthSpec, heightSpec);
这是将您的
内容
/
匹配父母
转换为测量规格。

非常感谢:)学到了一个新东西。
int widthSpec = MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.AT_MOST);
int heightSpec = MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY);
gridView.measure(widthSpec, heightSpec);