Fresco中的圆形图片有问题

4

我有一个处理圆形图片的问题,但是它没有起作用。Fresco下载了这张图片并进行了展示,但没有转换为圆形。我不知道自己需要添加什么,以下是我的代码:

Gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "25.0.0"
    defaultConfig {
    applicationId "pruebas.imaginamos.com.pruebas"
    minSdkVersion 21
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner     "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.facebook.fresco:fresco:0.14.1'
    testCompile 'junit:junit:4.12'
   //compile 'com.mostafagazar:customshapeimageview:1.0.4'
   // If your app supports Android versions before Ice Cream Sandwich (API level 14)
   compile 'com.facebook.fresco:animated-base-support:0.14.1'

}

这是MainActivity5.java文件:

package pruebas.imaginamos.com.pruebas;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.facebook.drawee.view.SimpleDraweeView;

public class MainActivity5 extends AppCompatActivity {

   SimpleDraweeView simpleDraweeView;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        String url = "https://firebasestorage.googleapis.com/v0/b/farmatodo-dev.appspot.com/o/imChat%2F2e4120c7-3755-4537-aceb-c2ed9d97ad01%2F1479745196209-about-06.jpg?alt=media&token=fb0c3c8a-eeac-488b-96d2-51bc7cbd088a";

        Uri uri = Uri.parse(url);


        simpleDraweeView = (SimpleDraweeView) findViewById(R.id.avatarImageView);
        simpleDraweeView.setImageURI(uri);


}

这是 activity_main.xml 文件。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:fresco="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="pruebas.imaginamos.com.pruebas.MainActivity5">


<RelativeLayout
    android:layout_width="match_parent"
    android:background="@color/colorAccentLight"
    android:layout_height="wrap_content">
    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/avatarImageView"
        android:layout_width="100dp"
        android:layout_height="100dp"
        fresco:placeholderImageScaleType="centerCrop"
        fresco:placeholderImage="@drawable/photo_female_3"
        fresco:roundAsCircle="true"/>
</RelativeLayout>

</LinearLayout>

虽然它应该是一样的,但你尝试过使用roundedCornerRadius而不是roundAsCircle吗? - Claudio Redi
也不行。我正在更改Gradle、目标版本和其他相关设置,看看是否会起作用。 - Carlos Alberto Murillo
3个回答

18

请替换这行内容,

xmlns:fresco="http://schemas.android.com/tools"

在您的XML文件中添加此行:

xmlns:fresco="http://schemas.android.com/apk/res-auto"

0

您可以查看此答案以获取圆形和带边框的圆形

public static void loadImageCircle(String url, SimpleDraweeView targetView){
    ImageRequest request = 
    ImageRequestBuilder.newBuilderWithSource(Uri.parse(url))
        .setProgressiveRenderingEnabled(false)
        .build();
    DraweeController controller = Fresco.newDraweeControllerBuilder()
        .setImageRequest(request)
        .setAutoPlayAnimations(false)
        .build();

    RoundingParams roundingParams = new RoundingParams();
    roundingParams.setRoundAsCircle(true);
    targetView.getHierarchy().setRoundingParams(roundingParams);

    targetView.setController(controller);
}

https://shareyourknowledge2017.wordpress.com/2017/07/31/android-fresco-displayingcircleandcirclewithborder/


0

替代方案:

使用自定义的drawable,并将其设置为imageview背景shadow.xml

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

    <item>
        <shape android:shape="oval">
              <solid android:color="@color/gray"/>
                <!--shadow Color-->
        </shape>
    </item>

    <item
        android:left="0dp"
        android:right="0dp"
        android:top="0dp"
        android:bottom="3dp">
        <shape android:shape="oval">
             <solid android:color="@color/lightgrey"/>//your background color here
        </shape>
    </item>

使用方法如下:

android:background="@drawable/shadow"

你可以尝试另一种解决方案:- https://github.com/Pkmmte/CircularImageView

这个库可以满足你的需求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接