2016-12-03 3 views
0

Для того, чтобы загрузить изображение, воспользуетесь глинистой библиотекой.Как установить границу изображения?

Я не могу получить границу изображения. Как установить границу изображения.

Glide.with(getApplicationContext()).load(image_path).asBitmap().centerCrop().into(new BitmapImageViewTarget(profile_pic) { 
      @Override 
      protected void setResource(Bitmap resource) { 
       RoundedBitmapDrawable circularBitmapDrawable = 
         RoundedBitmapDrawableFactory.create(MainActivity.this.getResources(), resource); 
       circularBitmapDrawable.setCircular(true); 

       profile_pic.setImageDrawable(circularBitmapDrawable); 
      } 
     }); 


<ImageView 
     android:id="@+id/profile_pic" 
     android:layout_width="120dp" 
     android:layout_height="120dp" 
     android:layout_gravity="center_horizontal" 
     android:src="@drawable/quila" 
     app:layout_behavior="profile.AvatarImageBehavior" 
     app:finalHeight="32dp" 
     app:finalYPosition="2dp" 
     app:startHeight="2dp" 
     app:startToolbarPosition="2dp" 
     app:startXPosition="2dp"/> 

Я искал через сеть и нашел this article, но я не хочу, чтобы добавить другую библиотеку. Кто-нибудь может мне с этим помочь?

Required image

ответ

0

не оптимальное решение, а обходной путь решения просто положить вид изображения внутри макета и установить фон этого макета и установить края ImageView до размера границы вы хотите. вам просто нужно создавать фон соответственно

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
<solid android:color="#FFFFFF" /> 
<stroke android:width="1dp" android:color="#000000" /> 
<padding android:left="1dp" android:top="1dp" android:right="1dp" 
    android:bottom="1dp" /> 
</shape> 

набора эту вытяжку в качестве фона в ImageView

+0

спасибо за помощь .. но я не думаю, что это правильный путь –

+0

я согласен, но другой маршрут будет чтобы определить собственное пользовательское изображение с помощью свойства border, которое косвенно использует концепцию, о которой я упоминал, попробуйте опубликовать изображение точной презентации ur, которая может помочь – Ak9637

+0

, вы также можете получить позиции своего изображения и затем нарисовать холст границы вокруг него – Ak9637

1

Вы можете использовать hdodenhof/CircleImageView для этого (Идеально подходит для аватары и фотографий).

<de.hdodenhof.circleimageview.CircleImageView 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/profile_image" 
android:layout_width="96dp" 
android:layout_height="96dp" 
android:src="@drawable/profile" 
app:civ_border_width="2dp" 
app:civ_border_color="#FF000000"/> 

ИЛИ:

Вы можете добавить рамку к любому мнению natievly путем создания Drawable границы

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@color/colorPrimary"/> <corners android:radius="80dp" /> <stroke android:width="5px" android:color="#ffffff" /> </shape>

и использовать его на любом просмотра кнопку для пример:

<Button 
     android:id="@+id/loginTwitterButton" 
     android:layout_width="240dp" 
     android:layout_height="wrap_content" 
     android:text="Twitter" 
     android:textAllCaps="false" 
     android:textColor="@android:color/white" 
     android:textSize="20sp" 
     android:layout_gravity="center_horizontal" 
     android:background="@drawable/border" 
     android:layout_marginTop="10dp" 
     /> 
0

Вы можете использовать GlideTransformation для преобразования растровых изображений.

public class BorderTransformation extends BitmapTransformation { 

    public BorderTransformation(Context context) { 
     super(context); 
    } 

    @Override 
    protected Bitmap transform(BitmapPool pool, Bitmap bmp, int outWidth, int outHeight) { 
    Bitmap sbmp; 
    int radius = bmp.getWidth(); 
    if (bmp.getWidth() != radius || bmp.getHeight() != radius) { 
     float smallest = Math.min(bmp.getWidth(), bmp.getHeight()); 
     float factor = smallest/radius; 
     sbmp = Bitmap.createScaledBitmap(bmp, (int)(bmp.getWidth()/factor), (int)(bmp.getHeight()/factor), false); 
    } else { 
     sbmp = bmp; 
    } 

    Bitmap output = Bitmap.createBitmap(radius, radius, 
      Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(output); 

    final int color = 0xffa19774; 
    final Paint paint = new Paint(); 
    final Paint stroke = new Paint(); 

    final Rect rect = new Rect(0, 0, radius, radius); 

    paint.setAntiAlias(true); 
    stroke.setAntiAlias(true); 

    paint.setFilterBitmap(true); 
    stroke.setFilterBitmap(true); 

    paint.setDither(true); 
    stroke.setDither(true); 

    canvas.drawARGB(0, 0, 0, 0); 
    paint.setColor(Color.RED); 
    stroke.setColor(Color.YELLOW); //border color 
    stroke.setStyle(Paint.Style.STROKE); 
    stroke.setStrokeWidth(14f); //border width 
    canvas.drawCircle(radius/2 + 0.7f, 
      radius/2 + 0.7f, radius/2 + 0.1f, paint); 
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 
    canvas.drawBitmap(sbmp, rect, rect, paint); 

    canvas.drawCircle(radius/2 + 0.7f, 
      radius/2 + 0.7f, radius/2 - stroke.getStrokeWidth()/2 +0.1f, stroke); 

    return output; 
    } 

    @Override 
    public String getId() { 
     return this.getClass().getName(); 
    } 
} 

и добавить преобразование скользят, где вы загружаете изображение, как

 Glide.with(getActivity()) 
       .load(test.getImg()) 
       .transform(new BorderTransformation(getContext())) 
       .into(vh.mImgBanner);