2017-07-29 76 views
3

我正在尝试制作一个gridview,它的下方有一个图像和文字,并带有角落半径效果。到目前为止似乎不可能。这是我这是拿着gridview的活动XML:如何在android中制作角落半径

<ScrollView 
    android:layout_width="match_parent" 
    android:fillViewport="true" 
    android:layout_height="match_parent"> 
    <GridView 
     android:id="@+id/gridview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:columnWidth="140dp" 
     android:padding="5dp" 
     android:layout_marginTop="10dp" 
     android:numColumns="auto_fit" 
     android:verticalSpacing="5dp" 
     android:horizontalSpacing="5dp" 
     android:stretchMode="columnWidth" 
     android:gravity="center"/> 
</ScrollView> 

这里是适配器XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:app="http://schemas.android.com/apk/res-auto" 
       android:orientation="vertical" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:layout_margin="20dp" 
       android:background="@drawable/grid_corner_radius" 
       android:layout_width="wrap_content"> 
    <ImageView 
     android:layout_width="200dp" 
     android:background="@drawable/cat_life" 
     android:layout_height="160dp"/> 

    <TextView 
     android:layout_width="200dp" 
     android:layout_height="40dp" 
     android:id="@+id/credit_textView" 
     android:gravity="center" 
     android:text="Life" 
     android:textColor="#FFFFFF" 
     android:background="@color/colorPrimary" 
     android:textSize="15dp"/> 
</LinearLayout>  

最后这里是圆角半径魔码:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape xmlns:android="http://schemas.android.com/apk/res/android" > 
      <solid android:color="#C0C0C0"></solid> 
      <corners android:radius="15dp"></corners> 
     </shape> 
    </item> 
</selector> 

而输出如下:

enter image description here

看到图像的清晰的矩形边缘是可见的。可能的解决方案是什么?

+0

您可以使用一些[lib](https://github.com/vinc3m1/RoundedImageView)并将xml背景也设置为textview。 – Fori

+0

顺便说一句,您可以通过将图像设置为TextView的顶部**复合可绘制**来保存LinearLayout和ImageView。非常适合提升性能(布局层次越平坦,活动/片段越快)。 –

+0

当然这个'xmlns:android =“http://schemas.android.com/apk/res/android”',根据上面的注释进入TextView声明。 –

回答

4

您可以使用CardView封装适配器xml并将cornerRadius设置为it.It应该可以工作。

compile 'com.android.support:cardview-v7:24.2.0'添加到您的应用gradle文件。

<android.support.v7.widget.CardView xmlns:android="https://schemas.android.com/apk/res/android" 
xmlns:card_view="https://schemas.android.com/apk/res-auto" 
android:id="@+id/card_view" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:padding="2dp" 
android:layout_margin="20dp" 
card_view:cardCornerRadius="4dp"> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:app="http://schemas.android.com/apk/res-auto" 
      android:layout_height="match_parent" 
      android:layout_width="match_parent"> 
<ImageView 
    android:layout_width="200dp" 
    android:background="@drawable/cat_life" 
    android:layout_height="160dp"/> 

<TextView 
    android:layout_width="200dp" 
    android:layout_height="40dp" 
    android:id="@+id/credit_textView" 
    android:gravity="center" 
    android:text="Life" 
    android:textColor="#FFFFFF" 
    android:background="@color/colorPrimary" 
    android:textSize="15dp"/> 
     </LinearLayout>  
</android.support.v7.widget.CardView> 
+0

谢谢@Dilpreet。找不到错误资源。我需要导入任何东西吗? – TechBee

+0

哦,是的只是添加编译'com.android.support:cardview-v7:24.2.0'到你的gradle文件 – Dilpreet

+0

我试过这段代码。没有运气。 – TechBee

1

试试这个代码:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_height="wrap_content" 
    android:padding="2dp" 
    android:layout_margin="20dp" 
    android:background="@drawable/corners_layout" 
    android:layout_width="wrap_content"> 
    <ImageView 
     android:layout_width="200dp" 
     android:layout_height="160dp" 
     android:background="@drawable/corners_image"/> 

    <TextView 
     android:layout_width="200dp" 
     android:layout_height="40dp" 
     android:id="@+id/credit_textView" 
     android:gravity="center" 
     android:text="Life" 
     android:textColor="#FFFFFF" 
     android:background="@drawable/corners_text" 
     android:textSize="15dp"/> 
</LinearLayout> 

使用这种风格布局:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <solid android:color="@color/colorPrimaryJob"/> 
    <corners android:radius="20dp"/> 
</shape> 

使用此样式的TextView:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <solid android:color="@color/colorBlue"/> 
    <corners android:bottomLeftRadius="20dp" android:bottomRightRadius="20dp"/> 
</shape> 

使用此样式的ImageView:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <solid android:color="@color/colorPrimaryJob"/> 
    <corners android:topLeftRadius="20dp" android:topRightRadius="20dp"/> 
</shape> 
+0

谢谢@Vishva。 – TechBee

+0

@TechBee如果它解决了你的问题,然后请标记为正确的。 –