studio setimagedrawable setbitmap library initialize imagen hdodenhof glide example circleimageview android bitmap imageview

android - setimagedrawable - CircularImageView estirando la imagen en API 10



int to bitmap android (0)

Estoy usando circularimageView para mostrar la imagen de una persona. Aquí está la clase.

public class CircularImageView extends ImageView { private int borderWidth = 4; private int viewWidth; private int viewHeight; private Bitmap image; private Paint paint; private Paint paintBorder; private BitmapShader shader; public CircularImageView(Context context) { super(context); setup(); } public CircularImageView(Context context, AttributeSet attrs) { super(context, attrs); setup(); } public CircularImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setup(); } private void setup() { // init paint paint = new Paint(); paintBorder = new Paint(); paint.setAntiAlias(true); setBorderColor(Color.WHITE); paintBorder.setAntiAlias(true); if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { this.setLayerType(LAYER_TYPE_SOFTWARE, paintBorder); } else { } paintBorder.setShadowLayer(4.0f, 0.0f, 2.0f, Color.BLACK); } public void setBorderWidth(int borderWidth) { this.borderWidth = borderWidth; this.invalidate(); } public void setBorderColor(int borderColor) { if (paintBorder != null) paintBorder.setColor(borderColor); this.invalidate(); } private void loadBitmap() { BitmapDrawable bitmapDrawable = (BitmapDrawable) this.getDrawable(); if (bitmapDrawable != null) image = bitmapDrawable.getBitmap(); } @SuppressLint("DrawAllocation") @Override public void onDraw(Canvas canvas) { // load the bitmap loadBitmap(); // init shader if (image != null) { shader = new BitmapShader(Bitmap.createScaledBitmap(image, canvas.getWidth(), canvas.getHeight(), false), Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); paint.setShader(shader); int circleCenter = viewWidth / 2; // circleCenter is the x or y of the view''s center // radius is the radius in pixels of the cirle to be drawn // paint contains the shader that will texture the shape canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, circleCenter + borderWidth - 4.0f, paintBorder); canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, circleCenter - 4.0f, paint); } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = measureWidth(widthMeasureSpec); int height = measureHeight(heightMeasureSpec, widthMeasureSpec); viewWidth = width - (borderWidth * 2); viewHeight = height - (borderWidth * 2); setMeasuredDimension(width, height); } private int measureWidth(int measureSpec) { int result = 0; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); if (specMode == MeasureSpec.EXACTLY) { // We were told how big to be result = specSize; } else { // Measure the text result = viewWidth; } return result; } private int measureHeight(int measureSpecHeight, int measureSpecWidth) { int result = 0; int specMode = MeasureSpec.getMode(measureSpecHeight); int specSize = MeasureSpec.getSize(measureSpecHeight); if (specMode == MeasureSpec.EXACTLY) { // We were told how big to be result = specSize; } else { // Measure the text (beware: ascent is a negative number) result = viewHeight; } return (result + 2); } }

Funciona bien en cualquier elemento> API 10, pero en otros casos la imagen se estira y solo la parte superior izquierda de la imagen es visible y está pixelada. Intenté cambiar el tamaño del mapa de bits de la imagen pero no ayudó.

Aquí está la inicialización del mapa de bits

PackageManager m = getActivity().getPackageManager(); String s = getActivity().getPackageName(); PackageInfo p = null; try { p = m.getPackageInfo(s, 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } s = p.applicationInfo.dataDir; //String root = Environment.getExternalStorageDirectory().toString(); s += "/player_photos/" + player.getPlayerId() + ".png"; Bitmap bMap = BitmapFactory.decodeFile(s); Resources res = getResources(); BitmapDrawable icon = new BitmapDrawable(res, bMap); playerDP.setImageDrawable(icon); }