Hello everyone,

I need to draw some stuff in perspective and i need it to move it
around as well as moving the perspective effect, i found the nice
example polytopoly on the google samples, i made some changes to the
code, and i found out, the following issues:

– When drawing with some perspective point sometimes i will draw the
rectangles and fill them with all the content in perspective like i
wanted it to, but if i move this rectangle the content of the
rectangle will be draw in perspective but i cannot fill the rectangle.

– I found as well that setting the
paint.style(Paint.Style.FILL_AND_STROKE) it will draw and fill the
rectangle in some positions but not the others, and if i set the style
to just fill it wont fill anything.

– Does anyone know what am I doing wrong? or is this some bug in the
android framework. I don't understand why when i move horizontally my
boxes one of these boxes stops filling but not the other?

So when i have this peace of code:

canvas.save();
doDraw(canvas, new float[] { xpos, ypos, xpos+width, ypos, xpos+width,
ypos+height, xpos, ypos+height},
        new float[] { xpos, ypos, xpos+width+10, ypos+10, xpos+width+10, ypos
+height, xpos, ypos+height+20});
canvas.restore();

that draws a box in perspective i can fill it in any horizontal and
vertical position, but only with the
mPaint.setStyle(Paint.Style.FILL_AND_STROKE) if I set it just to FILL
it will not fill.

if call this piece of code:

doDraw(canvas, new float[] { xpos, ypos, xpos+width, ypos, xpos+width,
ypos+height, xpos, ypos+height},
     new float[] { xpos, ypos+15, xpos+width+15, ypos, xpos+width+15,
ypos+height+25, xpos, ypos+height});
canvas.restore();

when xpos>120 it will not fill the box, but everything inside is in
perspective.

Can anyone help me with this please, i really don't understand what
i'm doing wrong, if there is no way around could anyone give me some
hints on how to work around this, in a efficient way.

The class code is the bottom of this message:
Any help would be really appreciated.


Regards

Ricardo



Here it is my class;

/*
 * Copyright (C) 2007 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.android.apis.graphics;

// Need the following import to get access to the app resources, since
this
// class is in a sub-package.
//import com.example.android.apis.R;

import android.app.Activity;
import android.content.Context;
import android.graphics.*;
import android.os.Bundle;
import android.view.View;

public class PolyToPoly extends GraphicsActivity {

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

    private static class SampleView extends View {
        private Paint   mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        private Matrix  mMatrix = new Matrix();
        private Paint.FontMetrics mFontMetrics;
        int xpos=10;
        int ypos=160;
        int width=64;
        int height=64;

        private void doDraw(Canvas canvas, float src[], float dst[]) {
            canvas.save();
            mMatrix.setPolyToPoly(src, 0, dst, 0, src.length >> 1);
            canvas.concat(mMatrix);

            mPaint.setColor(Color.GRAY);

            mPaint.setStyle(Paint.Style.FILL_AND_STROKE);

            Path path=new Path();
            path.moveTo(xpos, ypos);
                path.lineTo(xpos+width, ypos);
                path.lineTo(xpos+width, ypos+height);
                path.lineTo(xpos, ypos+height);
            path.close();
            canvas.drawPath(path, mPaint);

            mPaint.setColor(Color.RED);
            mPaint.setStyle(Paint.Style.FILL);
            // how to draw the text center on our square
            // centering in X is easy... use alignment (and X at
midpoint)
            float x = xpos+width/2;
            // centering in Y, we need to measure ascent/descent first
            float y = ypos+height/2 - (mFontMetrics.ascent +
mFontMetrics.descent)/2;
            canvas.drawText("blabla", x, y, mPaint);
            canvas.restore();
        }

        public SampleView(Context context) {
            super(context);

            // for when the style is STROKE
            mPaint.setStrokeWidth(4);
            // for when we draw text
            mPaint.setTextSize(13);
            mPaint.setTextAlign(Paint.Align.CENTER);
            mFontMetrics = mPaint.getFontMetrics();
        }

        @Override protected void onDraw(Canvas canvas) {
            Paint paint = mPaint;

            canvas.drawColor(Color.WHITE);
            canvas.save();
            doDraw(canvas, new float[] { xpos, ypos, xpos+width, ypos,
xpos+width, ypos+height, xpos, ypos+height},
                        new float[] { xpos, ypos, xpos+width+10, ypos+10, xpos
+width+10, ypos+height, xpos, ypos+height+20});
              canvas.restore();
//
            canvas.save();
            xpos=150;
            doDraw(canvas, new float[] { xpos, ypos, xpos+width, ypos,
xpos+width, ypos+height, xpos, ypos+height},
                        new float[] { xpos, ypos+15, xpos+width+15, ypos, xpos
+width+15, ypos+height+25, xpos, ypos+height});

            canvas.restore();


        }
    }
}

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

To unsubscribe, reply using "remove me" as the subject.

Reply via email to