0

キャンバス描画で、パスによって作成されたShapeDrawbleオブジェクトをどのように移動すると効率的ですか?

以下のコードは、移動するための新しいパスを通過しているように見えるため、毎回ShapeDrawableオブジェクトを再作成する必要があります。これは非常に無駄なリソースですが、解決する方法はありますか?

private void drawBitmapShape(Canvas canvas, Paint paint)
    {
         /*Draw a hollow triangle*/
        Path path=new Path();
        path.moveTo(10, 330);
        path.lineTo(70,330);
        path.lineTo(40,270);
        path.close();
        //canvas.drawPath(path, paint);

        /* create ShapeDrawable object and define the shape is elliptic */
        mShape = new ShapeDrawable(new PathShape(path, BitQQheight, BitQQheight));

        /* set up the ellipse things to draw for ShapeDrawable pictures */
        mShape.getPaint().setShader(mBitmapShader);
        /*set display area*/
        //BitQQheight=BitQQheight*2;
        mShape.setBounds(0,0, BitQQwidth, BitQQheight);

        /* draw ShapeDrawableQQ */
        mShape.draw(canvas);
    }
4

1 に答える 1

0

私はそれを解決したと思います

private void drawBitmapShape(Canvas canvas, Paint paint)
    {
        canvas.save();
        canvas.translate(5, 5);
        // rotate
        //canvas.rotate(90, 60, 310);
         /*Draw a hollow triangle*/
        Path path=new Path();
        path.moveTo(10, 330);
        path.lineTo(70,330);
        path.lineTo(40,270);
        path.close();
        //canvas.drawPath(path, paint);

        /* create ShapeDrawable object and define the shape is elliptic */
        mShape = new ShapeDrawable(new PathShape(path, BitQQheight, BitQQheight));

        /* set up the ellipse things to draw for ShapeDrawable pictures */
        mShape.getPaint().setShader(mBitmapShader);
        /* set display area */
        //BitQQheight=BitQQheight*2;
        mShape.setBounds(0,0, BitQQwidth, BitQQheight);

        /* draw ShapeDrawableQQ */
        mShape.draw(canvas);
        canvas.restore();
    }
于 2012-09-05T07:41:12.013 に答える