2016-09-14 3 views
1

У меня есть вопрос относительно циркуляра ImageView. Когда я пытаюсь установить фоновый цвет своего ImageView, он на самом деле оказывается квадратом, а не кругом, когда на самом деле я хотел бы, чтобы ImageView был простым кругом ImageView с некоторым текстом в качестве изображения. Вот моя попытка.Круглый ImageView фон фактически квадратный, а не круговой?

ImageView imageView = postViewHolder.fourthCommenter; 
Bitmap b=Bitmap.createBitmap(30, 30, Bitmap.Config.ARGB_8888); 
BitmapShader shader = new BitmapShader(b, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); 
Paint paint = new Paint(); 
paint.setShader(shader); 
paint.setAntiAlias(true); 
Canvas c = new Canvas(b); 
c.drawCircle(b.getWidth()/2, b.getHeight()/2, b.getWidth()/2, paint); 
c.drawText("+10",30,30,paint); 
imageView.setBackgroundColor(ContextCompat.getColor(context, R.color.material_color_grey_200)); 
imageView.setImageBitmap(b); 

Все, что я хочу, чтобы иметь изображение показать серую круглую Imageview со словом «+10» в нем. То, что появляется, - это простой квадрат Imageview без текста. Я не вижу, что я делаю неправильно.

Любая помощь будет оценена.

Спасибо!

EDIT: Вот пример того, что я хотел бы. Я хочу, чтобы образ, который выглядит точно так же, как +16 изображение, показанное на этом фото:

enter image description here

+0

вы назвали 'setBackgroundColor', вот почему Yout' ImageView' имеет свой фон, заполненный с этим цветом – pskink

+0

@pskink но я хочу 'ImageView' иметь фон, который является круглым, а не квадратным, а заполненный этим цветом. – user1871869

+0

поэтому не вызывайте 'setBackgroundColor' – pskink

ответ

0

Не уверен, что это правильный способ сделать это, но он должен работать для вашего случая:

Во-первых использовать для создания растрового изображения с требуемой формой круга:

public Bitmap getCircledBmp(Context mContext,Bitmap bmp){ 

     Canvas canvas = new Canvas(bmp); 
     int color = ContextCompat.getColor(mContext, R.color.material_color_grey_200); 

     Paint paint = new Paint(); 
     Rect rect = new Rect(0, 0, bmp.getWidth(), bmp.getHeight()); 
     RectF rectFloat = new RectF(rect); 

     paint.setAntiAlias(true); 
     paint.setColor(color); 


     canvas.drawARGB(0, 0, 0, 0); 
     canvas.drawOval(rectFloat, paint); 

     paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 

     canvas.drawBitmap(bmp, rect, rect, paint); 

     return bmp; 

    } 

Затем добавить текст, который вы хотите:

public Bitmap drawText(String text, Bitmap bmp, int textSize) { 

    //text dimensions 

    TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); 
    textPaint.setTextSize(textSize); 
    textPaint.setColor(Color.BLACK); 
    textPaint.setTextAlign(Paint.Align.CENTER); 

    StaticLayout mTextLayout = new StaticLayout(text, textPaint, 
      bmp.getWidth(), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); 

    Canvas canvas = new Canvas(bmp); 

    //draw text 
    canvas.save(); 
    canvas.translate((canvas.getWidth()/2), (canvas.getHeight()/2) - 
      ((mTextLayout.getHeight()/2))); 
    mTextLayout.draw(canvas); 
    canvas.restore(); 

    return bmp; 
} 

В конце концов, вы должны получить требуемое изображение, как это:

Bitmap bmp = Bitmap.createBitmap(100,100,Bitmap.Config.ARGB_8888); //change the values whatever you like 
ImageView imageView = postViewHolder.fourthCommenter; 
imageview.setImageBitmap(drawText("+10",getCircledBmp(this,bmp),30)); 
0

Все, что я хочу, чтобы иметь изображение показать серый круговой ImageView

Попробуйте этот код

Bitmap picture = BitmapFactory.decodeResource(getResources(), R.mipmap.add_image); 

ImageView imageView = (ImageView) findViewById(R.id.imgProfilePicture); 
imageView.setImageBitmap(getRoundedBitmap(picture)); 

public Bitmap getRoundedBitmap(Bitmap bitmap){ 
     Bitmap circleBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); 
     BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); 
     Paint paint = new Paint(); 
     paint.setShader(shader); 
     paint.setAntiAlias(true); 
     Canvas c = new Canvas(circleBitmap); 
     c.drawCircle(bitmap.getWidth()/2, bitmap.getHeight()/2, bitmap.getWidth()/2, paint); 
     return circleBitmap; 
    } 

Ваш xml-файл

<de.hdodenhof.circleimageview.CircleImageView 
     android:id="@+id/imgProfilePicture" 
     android:layout_width="110dp" 
     android:layout_height="110dp" 
     android:layout_marginBottom="20dp" 
     app:civ_border_width="3dp" 
     app:civ_border_color="@color/light_gray" /> 

и добавить в build.gradle

compile 'de.hdodenhof:circleimageview:2.1.0' 

Cirular ImageView Готово!

enter image description here

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