Ошибка в Canvas.drawVertices? (с кодом репро и logcat) - PullRequest
1 голос
/ 22 июня 2011

Просто вставьте этот код в простой скелетный проект 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();
    }
}

А затем установите это в качестве основного представления в 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.

1 Ответ

1 голос
/ 22 июня 2011

Даже если в документации для drawVertices это не указано явно, размер массива массивов verts, texs и colors должен совпадать с vertexCount.Третий ответ в на этот вопрос также, кажется, подтверждает это.Помните, что для рисования треугольников используются только первые цвета (vertexCount / 2), остальные значения игнорируются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...