2016-07-31 66 views
1

我想控制使用SeekBarImageView的水平作物,就像在這張照片呈現:使用搜索欄(安卓)的ImageView的水平作物

Crop controlled by a Seekbar

這是我的progressChanged事件代碼:

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); 
     } 
    }); 

新的寬度被正確計算(I檢查在logcat中的值),但是當我設置的ImageView位圖setImageBitmap看來該鈧aleType FIT_CENTER不工作了...

什麼實際上,我與我的代碼越來越是這樣的:

進度值:100

Progress value is 100

進度值:50

Progress value is 50

進度值:25

Progress value is 25

正如你所看到的,它不期望的行爲......

我的問題有兩個:

  1. 我應該在的ImageView使用什麼類型的規模?
  2. 我的新位圖是否正確定義?

回答

0

1-我應該在ImageView中使用什麼比例類型? 如果我理解正確,則不能確定,但​​如果要設置ImageView,則應使用重力屬性。

2-我的新位圖是否正確定義? 我是beleve awnser here由Lumis應該幫助你

0

最簡單的方法來做到這一點不是新的位圖 - 事實上,這是最糟糕的方式來做到這一點。最簡單的方法是通過其佈局以改變圖像視圖的寬度PARAMS

+0

所以ImageView的寬度不會改變其內容寬度(實際照片)?那麼imageView的寬度就是容器寬度? – sports

0

我希望這有助於:

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; 
} 

使用這樣的:

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

我使用FIT_CENTER保存我的ImageView? – sports

+0

是的,你應該保持FIT_CENTER。 – nshmura

+0

嗡嗡似乎沒有工作 – sports