gpt4 book ai didi

android - GridView 在一行中绘制其元素

转载 作者:行者123 更新时间:2023-11-29 17:56:26 25 4
gpt4 key购买 nike

我正在尝试在 Canvas 上绘制 GridView。我有一个自定义 View ,我正在重写它的 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 已绘制,但所有图像都绘制在一行中。我想我可能必须重写此 GridView 上的 onMeasure,但我不确定如何进行。请帮帮我!

最佳答案

您对 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 转换为度量规范。

关于android - GridView 在一行中绘制其元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19016345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com