2016-07-31 32 views
1

ich die horizontale Ernte eines ImageView mit einem SeekBar steuern möchten, wie auf diesem Foto dargestellt:Horizontale Ernte von Image eine SeekBar (Android) mit

Crop controlled by a Seekbar

Dies ist mein Code für das progressChanged Ereignis :

cropSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      float tuning = (float) progress/seekBar.getMax(); 

      if (tuning == 0) { 
       return; 
      } 

      int width = (int)(tuning * originalPhotoBitmap.getWidth()); 
      int height = originalPhotoBitmap.getHeight(); 

      modifiedPhotoBitmap = Bitmap.createBitmap(originalPhotoBitmap, 0, 0, width, height); 

      imageView.setImageBitmap(modifiedPhotoBitmap); 
     } 
    }); 

die neue Breite korrekt berechnet wird (I den Wert in logcat markiert) ist, aber wenn ich die Imageview Bitmap mit setImageBitmap gesetzt scheint es, daß die Sc aleType FIT_CENTER funktioniert nicht mehr ...

Was ich eigentlich mit meinem Code bekommen, ist dies:

Fortschritt Wert: 100

Progress value is 100

Wert Fortschritt: 50

Progress value is 50

Fortschrittswert: 25

Progress value is 25

Wie Sie sehen können, ist es nicht das gewünschte Verhalten ...

Meine Fragen sind zwei:

  1. Welche Tonleiter sollte ich in der Image verwenden?
  2. Ist meine neue Bitmap korrekt definiert?

Antwort

0

1- Welchen Skalentyp sollte ich in ImageView verwenden? Nicht sicher, wenn ich richtig verstanden habe, aber wenn Sie das ImageView zentralisiert einstellen möchten, sollten Sie Schwerkraft Attribut verwenden.

2- Ist meine neue Bitmap korrekt definiert? I beleve the awnser here von Lumis sollte Ihnen helfen

0

Der einfachste Weg, dies zu tun ist nicht neue Bitmaps machen - in der Tat, das ist der schlimmste Weg, es zu tun. Der einfachste Weg ist, um die Breite des Bildes Blick über das Layout params

+0

so die Imageview Breite nicht verändern ihre Inhaltsbreite (das eigentliche Foto)? Die imageView Breite ist also die Containerbreite? – sports

0

Ich hoffe, das hilft zu ändern:

Bitmap getCroppedBitmap(Bitmap bitmap, int progress) { 
    Bitmap output = Bitmap.createBitmap(
      bitmap.getWidth(), 
      bitmap.getHeight(), 
      Bitmap.Config.ARGB_8888); 

    Canvas canvas = new Canvas(output); 

    Paint paint = new Paint(); 
    canvas.drawRect(0, 0, bitmap.getWidth() * progress/100, bitmap.getHeight(), paint); 
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 

    Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 
    canvas.drawBitmap(bitmap, rect, rect, paint); 

    return output; 
} 

Verwendung wie folgt aus:

int progress = 70; 
imageView.setImageBitmap(getCroppedBitmap(originalPhotoBitmap, progress)); 
+0

Ich behalte meinen ImageView mit FIT_CENTER? – sports

+0

Ja, du solltest FIT_CENTER behalten. – nshmura

+0

Brummen scheint nicht zu arbeiten – sports