gpt4 book ai didi

android - Canvas.drawVertices 中的错误? (带有重现代码和 logcat)

转载 作者:行者123 更新时间:2023-11-30 04:38:28 25 4
gpt4 key购买 nike

只需将此代码粘贴到一个简单的骨架 Android 项目中即可。

public final class DrawableView extends View
{
private float[] mVertices = {0, 0, 255, 0, 255, 255, 0, 255};
private float[] mTexCoords = {0, 0, 255, 0, 255, 255, 0, 255};
private short[] mIndices = {0, 2, 3, 0, 1, 2};
private int[] mColors = {Color.RED, Color.GREEN, Color.BLUE, Color.MAGENTA};

Context mContext;
BitmapShader mShader;

public DrawableView(Context context)
{
super(context);
mContext = context;
mShader = new BitmapShader(BitmapFactory.decodeResource(getResources(), R.drawable.icon), Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
}

@Override
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setShader(mShader);

canvas.drawVertices(Canvas.VertexMode.TRIANGLES, 8, mVertices, 0, mTexCoords, 0, mColors, 0, mIndices, 0, 6, paint);

invalidate();
}
}

然后在主 Activity 的 onCreate 中将其设置为主视图。

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(new DrawableView(this));
}

这应该使应用程序退出,没有错误,甚至没有“强制关闭”对话框。 Logcat 也没有给我任何有用的信息 (http://pastebin.com/c67NJnBz)!

不过,以下两个 drawVertices 调用都会产生所需的效果。

canvas.drawVertices(Canvas.VertexMode.TRIANGLES, 8, mVertices, 0, mTexCoords, 0, null, 0, mIndices, 0, 6, paint); // Works!

paint.setColor(Color.RED);
// paint.setShader(mShader);

canvas.drawVertices(Canvas.VertexMode.TRIANGLES, 8, mVertices, 0, mTexCoords, 0, mColors, 0, mIndices, 0, 6, paint); // Renders wireframe

我做错了什么吗?请帮助我确定这是否是 Android API 错误。

最佳答案

即使 documentation因为 drawVertices 没有明确说明这一点,verts、texs 和 colors 数组的数组大小必须都与 vertexCount 匹配。第三个答案在this question似乎也证实了这一点。请记住,只有前 (vertexCount/2) 种颜色用于绘制三角形,其他值将被忽略。

关于android - Canvas.drawVertices 中的错误? (带有重现代码和 logcat),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6434132/

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