Rotazione di un’immagine in Android

Come può un Drawable caricato da una risorsa verrà ruotata quando è disegnata? Per esempio, vorrei disegnare una freccia e di essere in grado di ruotare a faccia in direzioni diverse quando viene disegnato?

InformationsquelleAutor Computerish | 2011-01-21



4 Replies
  1. 20

    È necessario utilizzare Bitmap e Tela funzioni di Classe per preparare drawable:

    Bitmap bmpOriginal = BitmapFactory.decodeResource(this.getResources(), R.drawable.image2);
    Bitmap bmResult = Bitmap.createBitmap(bmpOriginal.getWidth(), bmpOriginal.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas tempCanvas = new Canvas(bmResult); 
    tempCanvas.rotate(90, bmpOriginal.getWidth()/2, bmpOriginal.getHeight()/2);
    tempCanvas.drawBitmap(bmpOriginal, 0, 0, null);
    
    mImageView.setImageBitmap(bmResult);

    In questo codice di esempio, la rotazione di 90 gradi sopra il centro dell’immagine si verifica.

    • OK, Se è necessario per rendere l’immagine semi-trasparente o bisogno di funzionalità di zoom, si possono verificare anche questo stackoverflow.com/questions/4688306/…
    • Funziona bene se l’immagine originale è quadrata :)…. che cosa se no?
    • Funziona bene per me…. Che cosa è la questione si incontrano?
    • Come Jay ha detto un paio di anni fa questo funziona bene se l’immagine originale è la piazza, che non piazza bitmap?
    • Come ho anche chiesto a un paio di anni fa :), qual è il problema che incontro?
    • Un altro possibile modo per ruotare un’immagine bitmap, ma senza la creazione di un temporaneo bitmap sul mucchio (che può prendere un sacco di spazio, insieme con l’originale), può essere trovato qui: github.com/AndroidDeveloperLB/AndroidJniBitmapOperations

  2. 10

    essenzialmente riconducibili a: fare un(n inverso) tela di trasformazione, invece di trasformare drawable

    private BitmapDrawable drawable; //or Drawable
    
    protected void onDraw(Canvas canvas) { //inherited from View 
      //...
      canvas.save();
      canvas.rotate(degrees, pivotX, pivotY);
      drawable.draw(canvas);
      canvas.restore();
      //...
    }

    se si dispone di BitmapDrawable può essere auspicabile per aumentare la qualità del prodotto in uscita impostando antialiasing

    drawable.setAntialias(true);
    • penso che questa sia la più efficace soluzione per ora
    • In realtà tela.rotate() deve essere fatto prima disegno dell’immagine.
    • non perdere l’onMeasure implementazione della funzione?
    • piccolo problema è che drawable è qui sempre ruotato intorno di (0,0) come punto di perno
  3. 2

    Accettato di rispondere non funziona per me. Io non immagine quadrata, così ho cambiato il suo codice un po’.

    private Bitmap rotateDrawable(@DrawableRes int resId) {
        Bitmap bmpOriginal = BitmapFactory.decodeResource(getResources(), resId);
        Bitmap bmpResult = Bitmap.createBitmap(bmpOriginal.getHeight(), bmpOriginal.getWidth(), Bitmap.Config.ARGB_8888);
        Canvas tempCanvas = new Canvas(bmpResult);
        int pivot = bmpOriginal.getHeight() / 2;
        tempCanvas.rotate(90, pivot, pivot);
        tempCanvas.drawBitmap(bmpOriginal, 0, 0, null);
        return bmpResult;
    }
    
    mImageView.setImageBitmap(rotateDrawable(R.drawable.some_image));
  4. 0

    essenzialmente questo:

    ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
    Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
    spaceshipImage.startAnimation(hyperspaceJumpAnimation);

    link fonte:

    http://developer.android.com/guide/topics/graphics/2d-graphics.html#tween-animation

    • Non è ciò che il richiedente ha voluto, questa ruota tra una serie di immagini, che cosa era che volevo era un planare rotazione di una singola immagine!
    • In realtà, è possibile effettuare le rotazioni (su una singola Immagine) con un animazione con interpolazione. developer.android.com/guide/topics/resources/…
    • Ed, grazie per il supporto.

Lascia un commento