1

キャンバスに GridView を描画しようとしています。カスタムビューがあり、これを実現するために 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 は次のとおりです。

android:orientation="vertical"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:columnWidth="90dp"
android:numColumns="auto_fit"
android:verticalSpacing="1dp"
android:horizontalSpacing="1dp"
android:stretchMode="columnWidth"
android:gravity="center">

GridView が描画されますが、すべての画像が 1 行に描画されます。この GridView で onMeasure をオーバーライドする必要があると思いますが、どうすればよいかわかりません。私を助けてください !

4

1 に答える 1

3

への呼び出しmeasure()は間違っています。View.MeasureSpecこのメソッドは、クラスを使用して構築できる「メジャー スペック」をパラメーターとして受け取ります。あなたの場合、あなたが望むのは次のとおりです。

int widthSpec = MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.AT_MOST);
int heightSpec = MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY);
gridView.measure(widthSpec, heightSpec);

これは、WRAP_CONTENT/MATCH_PARENTをメジャー スペックに変換したものです。

于 2013-09-25T22:54:45.337 に答える