2014-03-23 2 views
0

Я хочу отобразить круглое изображение. У меня квадратное изображение, и я обвожу его, используя код ниже.Изображение не округлено правильно

public static void roundImageForImageView(ImageView imageView) { 

     try { 
      Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap(); 
      int diameter = Math.min(bitmap.getWidth(), bitmap.getHeight()); 

      Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), 
        bitmap.getHeight(), Config.ARGB_8888); 
      Canvas canvas = new Canvas(output); 

      final int color = 0xff424242; 
      final Paint paint = new Paint(); 
      int rectX = (bitmap.getWidth() - diameter)/2; 
      int rectY = (bitmap.getHeight() - diameter)/2; 

      final Rect rect = new Rect(rectX, rectY, rectX + diameter, rectY 
        + diameter); 

      final RectF rectF = new RectF(rect); 
      final float roundPx = diameter; 

      paint.setAntiAlias(true); 
      canvas.drawARGB(0, 0, 0, 0); 
      paint.setColor(color); 
      canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 

      paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
      canvas.drawBitmap(bitmap, rect, rect, paint); 

      imageView.setImageBitmap(output); 

      bitmap = null; 
      output = null; 
     } catch(OutOfMemoryError e) { 
      e.printStackTrace(); 
     } 
    } 

ImageView расположение:

<ImageView 
    android:id="@+id/image_id" 
    android:background = "@drawable/placeholder" 
    android:scaleType="centerCrop" 
    android:layout_width="250dp" 
    android:layout_height="250dp" 
    android:layout_marginTop="10dp" 
    android:contentDescription="@string/profile_picture_description" /> 

Но выводимое изображение имеет небольшие крошечные порезы на середине всех краев. Я пробовал играть с размером изображения.

enter image description here

Любая идея, почему эти надрезы там, или, как ее решить?

** Обновление: ** Используя android:scaleType="center" для ImageView приведен ниже.

enter image description here

ответ

0

Это была ошибка в файле макета.

android:background = "@drawable/placeholder" 

Вышеуказанная линия вызывала появление размытого кругового круга. @drawable/placeholder - это изображение, и оно само по себе размыто.

Я установил его как background, а не src.

android:src = "@drawable/placeholder" 
0

Вы используете

android:scaleType="centerCrop" 

Это кадрирование изображения и делает строки в верхнем левом нижнем углу и справа.

попробуйте использовать

android:scaleType="centerInside" 

Кроме того, посмотрите here at ImageView.ScaleTypes для некоторой хорошей информации о различных типах масштаба:

+0

См. Мой обновленный вопрос. – Geek

Смежные вопросы