Hay otra manera de dibujar un objeto en un lienzo en android?

Este código dentro de draw() no funciona:

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pushpin);
canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null);

Bueno en realidad, trabajando en mi 1er código, pero cuando me he trasladado esto a otra clase llamada MarkOverlay, no funciona más.

  markerOverlay = new MarkerOverlay(getApplicationContext(), p);
                      listOfOverlays.add(markerOverlay);  

¿Qué parámetros debo pasar a MarkerOverlay para que este código funcione? El error está en algún lugar en getResources().

FYI, de lona.drawOval está trabajando perfectamente, pero lo que realmente desea dibujar una Imagen no es un Óvalo. 🙂

InformationsquelleAutor lulala | 2010-01-31

2 Comentarios

  1. 23
    package com.canvas;
    
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.view.View;
    
    public class Keypaint extends View {
        Paint p;
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            p=new Paint();
            Bitmap b=BitmapFactory.decodeResource(getResources(), R.drawable.icon);
            p.setColor(Color.RED);
            canvas.drawBitmap(b, 0, 0, p);
        }
    
        public Keypaint(Context context) {
            super(context);
        }
    }
    • Usted tiene que liberar de mapa de bits de datos de mapa de bits.papelera() o otra cosa que conseguir un desagradable pérdida de memoria: la creación de un nuevo mapa de bits en cada dibujo ciclo.
    • No decodificar la imagen en onDraw – do como mucho del trabajo pesado fuera de procesamiento de bucle.
  2. 18

    Prefiero hacer esto, ya que sólo genera la imagen una vez:

    public class CustomView extends View {
    
        private Drawable mCustomImage;
    
        public CustomView(Context context, AttributeSet attrs) {
            super(context, attrs);
            mCustomImage = context.getResources().getDrawable(R.drawable.my_image);
        }
    
        ...
    
        protected void onDraw(Canvas canvas) {
            Rect imageBounds = canvas.getClipBounds();  //Adjust this for where you want it
    
            mCustomImage.setBounds(imageBounds);
            mCustomImage.draw(canvas);
        }
    }
    • +1 para no hacer asignaciones o descomprimir una imagen en onDraw
    • me da este eclipse advertencia: Evite el objeto de asignaciones durante el sorteo de operaciones: el Uso de la Lona.getClipBounds(Rect) en lugar de un Lienzo.getClipBounds (), el cual asigna un temporal Rect
    • Esto puede ser aún mejor si usted sigue las sencillas optimizador de golpes dados por Eclipse. Es decir. el lienzo.getClipBounds(imageBounds); mCustomImage.setBounds(imageBounds); Tener un super rápida onDraw es muy importante.
    • No su trabajo lollipop y pre lollipop alguna idea ?

Dejar respuesta

Please enter your comment!
Please enter your name here