Just paste this code into a simple skeleton Android project.
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(); } }
And then set this as the main view in onCreate of the main action.
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new DrawableView(this)); }
This should make the application exit without errors or even with the "force close" dialog. Logcat doesn't give me anything useful (http://pastebin.com/c67NJnBz), either!
Both of the following drawVertices calls produce the desired effect.
canvas.drawVertices(Canvas.VertexMode.TRIANGLES, 8, mVertices, 0, mTexCoords, 0, null, 0, mIndices, 0, 6, paint);
and
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
Am I doing something wrong? Please help me determine if this is an Android API error.