使用SeekBar - Android动态更新ImageView中的圆形大小

时间:2017-02-11 22:02:03

标签: android

在我的应用程序中,我有一个带有搜索栏的对话框,它将尺寸设置为我的画笔,在下面我想简单预览这个尺寸。我设法在这个搜索栏的下方创建了ImageView,并在里面画了一个圆圈。只要我取得比以前更大的进步一切正常,圈子就像它应该的那样动态增长,但是当我降低进度时没有任何反应。我想每当我改变进度'值时,新的圆圈就出现在旧的圆圈上,所以当我想让圆圈变小时,它就无法看到。我尝试过像setImageBitmap(null)setImageResource(0)这样的方法,但它没有用。 我的代码如下所示:

LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View view = layoutInflater.inflate(R.layout.brush_size,null);
            AlertDialog.Builder builder = new AlertDialog.Builder(this)
                    .setView(view)
                    .setTitle("Change brush size");
            alertDialog = builder.create();
            alertDialog.show();
            final ImageView imageView = (ImageView)view.findViewById(R.id.image_view);
            final Bitmap preview = Bitmap.createBitmap(100,100,Bitmap.Config.ARGB_8888);
            final Canvas canvas = new Canvas(preview);
            final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
            paint.setColor(mPaintView.getColor());
            SeekBar sb = (SeekBar)view.findViewById(R.id.seekBar);
            sb.setMax(50);
            sb.setProgress(mPaintView.getSize());
            sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                @Override
                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                    mPaintView.setSize(progress);
                    canvas.drawCircle(50,50,mPaintView.getSize(),paint);
                    imageView.setImageBitmap(preview);
                }

每当我更改进度条时,有没有办法真正清除我的imageView,那么可以看到较小的圆圈?

1 个答案:

答案 0 :(得分:1)

使用 Color.TRANSPARENT PorterDuff.Mode.CLEAR 参数进行绘制应该可以解决问题。

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    mPaintView.setSize(progress);
    canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR)
    canvas.drawCircle(50,50,mPaintView.getSize(),paint);
    imageView.setImageBitmap(preview);
}