1. 程式人生 > >android開源專案---RoundedImageView製作圓角矩形,橢圓形以其圓形控制元件

android開源專案---RoundedImageView製作圓角矩形,橢圓形以其圓形控制元件

一、專案概述

在專案中美工提供給我們的圖片通常是矩形的,我們如何把矩形的圖片做成圓角矩形、橢圓形以其圓形效果的圖形顯示效果,這就是我這篇文章要講的內容。

效果如下:


我這裡使用的是開源專案  RoundedImageView

二、搭建RoundedImageView的使用環境

下載後,我們得到RoundedImageView資料夾。

將RoundedImageView\roundedimageview\src\main\java\com\makeramen下的三個java檔案複製到自己專案中。這是會出現一些錯誤。

1、直接複製java檔案導致包引入的錯誤,這個只需要修改匯入的包名即可。

2、RoundedImageView依賴於picasso-2.3.4.jar,這個需要下載放在製劑專案的libs目錄下。下載地址為點選開啟連結

3、缺少attrs.xml檔案,將\RoundedImageView\roundedimageview\src\main\res\values\attrs.xml複製到自己專案的values目錄下。

按照要求排版後,專案結構大致如下:


注意必要檔案是 libs下面的picasso.jar  , values下面的attrs.xml  、和view包下面的三個java檔案(RoundedDrawable,RoundedImageView和RoundedTransformationBuilder)

三、使用RoundedImageView

這裡主要是要注意它的幾個自定義屬性的作用 。

<?xml version="1.0" encoding="utf-8"?>
<resources>
   
    <!-- 圓角矩形 橢圓的自定義屬性
    	corner_radius : 邊角弧度。這個值越大,圓角越明顯
    	border_width  : 邊框寬度
    	border_color  : 邊框顏色
    	mutate_background  :   背景是否變化(這裡在demo中改變不明顯)
    	oval          :   是否以橢圓形式顯示  true為以橢圓形式顯示   flase以矩形形式顯示
     -->
    <declare-styleable name="RoundedImageView">
	    <attr name="corner_radius" format="dimension" />
	    <attr name="border_width" format="dimension" />
	    <attr name="border_color" format="color" />
	    <attr name="mutate_background" format="boolean" />
	    <attr name="oval" format="boolean" />
   		<attr name="android:scaleType" />
    </declare-styleable>
    
</resources>


本專案的layout.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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/grey"
    android:orientation="vertical" >


    <ScrollView 
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="@color/light" >

            <edu.njupt.javer.view.RoundedImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:padding="10dip"
                android:scaleType="center"
                android:src="@drawable/mm1"
                app:border_color="@color/dark"
                app:border_width="3dip"
                app:corner_radius="30dip"
                app:mutate_background="true"
                app:oval="false" />
        </RelativeLayout>

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="@color/dark" >

            <edu.njupt.javer.view.RoundedImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:padding="10dip"
                android:scaleType="center"
                android:src="@drawable/mm2"
                app:border_color="@color/light"
                app:border_width="3dip"
                app:corner_radius="30dip"
                app:mutate_background="true"
                app:oval="true" />
        </RelativeLayout>
        
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="@color/light" >

            <edu.njupt.javer.view.RoundedImageView
                android:layout_width="160dp"
                android:layout_height="160dp"
                android:layout_centerInParent="true"
                android:padding="10dip"
                android:scaleType="center"
                android:src="@drawable/mm3"
                app:border_color="@color/dark"
                app:border_width="3dip"
                app:corner_radius="30dip"
                app:mutate_background="true"
                app:oval="true" />
        </RelativeLayout>
    </LinearLayout>
	</ScrollView>
</LinearLayout>

四、專案下載地址:

五、補充

除了在xml中設定屬性外,RoundedImageView也可以在程式碼中設定屬性。

Define in xml:

<com.makeramen.RoundedImageView
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/imageView1"
        android:src="@drawable/photo1"
        android:scaleType="centerCrop"
        app:corner_radius="30dip"
        app:border_width="2dip"
        app:border_color="#333333"
        app:mutate_background="true"
        app:oval="true" />

Or in code:

RoundedImageView iv = new RoundedImageView(context);
iv.setScaleType(ScaleType.CENTER_CROP);
iv.setCornerRadius(10);
iv.setBorderWidth(2);
iv.setBorderColor(Color.DKGRAY);
iv.setMutateBackground(true);
iv.setImageDrawable(drawable);
iv.setBackground(backgroundDrawable);
iv.setOval(true);

Or make a Transformation for Picasso:

Transformation transformation = new RoundedTransformationBuilder()
          .borderColor(Color.BLACK)
          .borderWidthDp(3)
          .cornerRadiusDp(30)
          .oval(false)
          .build();

Picasso.with(context)
    .load(url)
    .fit()
    .transform(transformation)
    .into(imageView);