2016-08-01 98 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>