2016-08-01 157 views
0

我使用drawable作爲圖像背景來給出邊框,但它不能按需要工作(圓不完美)。如何爲圓形圖像視圖繪製邊框?

here is the screen shot of my app

回收站視圖項佈局

<data> 

    <variable 
     name="news" 
     type="com.android.mvvm.model.NewsItem" /> 

    <variable 
     name="clickListener" 
     type="com.android.common.util.RecyclerViewOnItemClickHandler"></variable> 
</data> 

<FrameLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <de.hdodenhof.circleimageview.CircleImageView 
     android:id="@+id/circular_image_selected" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:onClick="@{clickListener.onClick}" 
     android:src="@{news.thumb}" /> 

    <de.hdodenhof.circleimageview.CircleImageView 
     android:id="@+id/circular_image_unselected" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:onClick="@{clickListener.onClick}" 
     android:src="@{news.thumb}" 
     android:visibility="gone" /> 

</FrameLayout> 

適配器的onBindViewHolder方法,其中,我對項目設定背景到圖像視圖中選擇

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
    if (holder instanceof RecyclerViewHolder) { 
     NewsItem item = list.get(position); 

     RecyclerViewHolder newsViewHolder = (RecyclerViewHolder) holder; 
     if (item.isSelected) { 
      CircleImageView img = (CircleImageView) newsViewHolder.getBinding().getRoot().findViewById(R.id.circular_image_unselected); 
      newsViewHolder.getBinding().getRoot().findViewById(R.id.circular_image_unselected).setVisibility(View.VISIBLE); 
      img.setBackground(context.getResources().getDrawable(R.drawable.selected_img_bg)); 

     } else { 
      CircleImageView img = (CircleImageView) newsViewHolder.getBinding().getRoot().findViewById(R.id.circular_image_selected); 
      img.setColorFilter(Color.argb(150, 155, 155, 155), PorterDuff.Mode.SRC_ATOP); 
      newsViewHolder.getBinding().getRoot().findViewById(R.id.circular_image_unselected).setVisibility(View.INVISIBLE); 
     } 
     newsViewHolder.getBinding().setVariable(BR.clickListener, 
       new RecyclerViewOnItemClickHandler<>(item, position, listener)); 
     newsViewHolder.getBinding().setVariable(BR.news, item); 
     newsViewHolder.getBinding().executePendingBindings(); 

    } 
} 

可繪製圖像背景

<?xml version="1.0" encoding="utf-8"?><shape 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="oval"> 
<solid android:color="@android:color/transparent" /> 
<stroke android:color="@android:color/holo_red_dark" android:width="3dp"/> 
<size 
    android:width="100dp" 
    android:height="100dp"/> 

+0

好像你的形象被溢出邊界。你有沒有嘗試使用106作爲寬度和高度?你將圓圈設置爲100的大小,但是從左到右加3,所需的高度和寬度應該是106 –

+0

@SteveMorin是的,我嘗試了106dp的高度和寬度,但仍得到相同的效果。 –

回答

1
<?xml version="1.0" encoding="utf-8"?> 

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="ring" 
android:useLevel="false" 
android:thickness="7.8dp" 
android:innerRadius="0dp" 
> 

<solid 
    android:color="#F00" 
    /> 
<stroke 
    android:width="1dip" 
    android:color="#FFF" /> 

以此爲背景,以您的圖片增加厚度相應..或者,如果這行不通保留以前的背景xml並在你的圖像視圖中添加android:padding大約10到15 dp

0

我解決這個放置的ImageView到RelativeLayout的

<RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:adjustViewBounds="true" 
      android:layout_margin="5dp" 
      android:padding="2dp" 
      android:background="@drawable/imageborder" 
      android:src="@drawable/placeholder" 
      android:id="@+id/notificator_image"/> 

     </RelativeLayout> 

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval" > 


<stroke android:width="2dp" 
    android:color="#cc195d" /> 

</shape>