如何在用于个人资料照片的当前Google应用程序中创建可选择的圆形
ImageView?
这就是我所说的:
取消选择上面的图像,然后选择下面的图像.
到目前为止我的工作:
loadedImage是显示的位图
mImageView.setBackground(createStateListDrawable()); mImageView.setImageBitmap(createRoundImage(loadedImage));
使用的方法:
private Bitmap createRoundImage(Bitmap loadedImage) { Bitmap circleBitmap = Bitmap.createBitmap(loadedImage.getWidth(),loadedImage.getHeight(),Bitmap.Config.ARGB_8888); BitmapShader shader = new BitmapShader(loadedImage,Shader.TileMode.CLAMP,Shader.TileMode.CLAMP); Paint paint = new Paint(); paint.setAntiAlias(true); paint.setShader(shader); Canvas c = new Canvas(circleBitmap); c.drawCircle(loadedImage.getWidth() / 2,loadedImage.getHeight() / 2,loadedImage.getWidth() / 2,paint); return circleBitmap; } private StateListDrawable createStateListDrawable() { StateListDrawable stateListDrawable = new StateListDrawable(); OvalShape ovalShape = new OvalShape(); ShapeDrawable shapeDrawable = new ShapeDrawable(ovalShape); stateListDrawable.addState(new int[] { android.R.attr.state_pressed },shapeDrawable); stateListDrawable.addState(StateSet.WILD_CARD,shapeDrawable); return stateListDrawable; }
ImageView的大小是imageSizePx,图像的大小是imageSizePx – 3.因此,这意味着背景应该与图像重叠.哪个不起作用.
解决方法
非常简单的解决方案,感谢@CommonsWare的提示.
位图大小:imageSizePx – 3DP
ImageView的大小:imageSizePx
mImageView.setBackground(createStateListDrawable(imageSizePx)); mImageView.setImageBitmap(loadedImage); private StateListDrawable createStateListDrawable(int size) { StateListDrawable stateListDrawable = new StateListDrawable(); OvalShape ovalShape = new OvalShape(); ovalShape.resize(size,size); ShapeDrawable shapeDrawable = new ShapeDrawable(ovalShape); shapeDrawable.getPaint().setColor(getResources().getColor(R.color.somecolor)); stateListDrawable.addState(new int[]{android.R.attr.state_pressed},shapeDrawable); stateListDrawable.addState(new int[]{android.R.attr.state_focused},shapeDrawable); stateListDrawable.addState(new int[]{},null); return stateListDrawable; }