我想使用ImageView
来控制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);
}
});
正确计算新宽度(我检查了logcat中的值),但是当我使用setImageBitmap
设置imageView的位图时,似乎ScaleType FIT_CENTER
不是工作了......
我实际使用的代码是:
进度值:100
进展值:50
进展值:25
正如您所看到的,这不是理想的行为......
我的问题是两个:
答案 0 :(得分:0)
1-我应该在ImageView中使用什么比例类型? 如果我理解正确但不是shure,但如果你想集中设置ImageView,你应该使用Gravity属性。
2-我的新位图是否正确定义? 我认为Lumis应该帮助你的芒果here
答案 1 :(得分:0)
最简单的方法是不制作新的位图 - 实际上这是最糟糕的做法。最简单的方法是通过布局参数
来改变图像视图的宽度答案 2 :(得分:0)
我希望这会有所帮助:
package Net::FTP::File;
use strict;
use warnings;
use Net::FTP;
# ...
sub Net::FTP::pretty_dir {
shift;
my $newp = shift;
if ( defined $newp ) {
$pretty = $newp;
$DirProcHash{cols} = $cols{pretty} if $pretty;
$DirProcHash{cols} = $cols{utility} if !$pretty;
}
return $pretty;
}
# ...
sub Net::FTP::isfile {
my $ftp = shift;
return 1 if $ftp->exists(@_) && !$ftp->isdir(@_);
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;
}