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