我无法在android studio中使用圆形图像视图

时间:2017-08-12 18:25:21

标签: android

我添加了依赖编译' de.hdodenhof:circleimageview:2.0.0'

我的xml文件是     

<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">

<de.hdodenhof.circleimageview.CircleImageView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/profile_image"
    android:layout_width="96dp"
    android:layout_height="96dp"
    android:src="@drawable/profile"

    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    tools:layout_constraintTop_creator="1"
    tools:layout_constraintRight_creator="1"
    android:layout_marginTop="57dp"
    tools:layout_constraintLeft_creator="1"
    app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>
<android.support.design.widget.NavigationView
    android:layout_width="match_parent"
    android:layout_height="match_parent" android:layout_gravity="start"

    app:menu="@menu/profile_menu">

</android.support.design.widget.NavigationView>

</android.support.v4.widget.DrawerLayout>

我仍然遇到运行时异常 此行上的错误膨胀类&#34; de.hdodenhof.circleimageview.CircleImageView&#34;

1 个答案:

答案 0 :(得分:0)

在您的xml布局中使用如下

    ImageView profilePictureImg = (ImageView) 
     view.findViewById(R.id.profile_pic_round);

然后在你的java文件中定期初始化你的imageview,如下所示:

   import android.content.Context;
   import android.graphics.Bitmap;
   import android.graphics.Bitmap.Config;
   import android.graphics.Canvas;
   import android.graphics.Color;
   import android.graphics.Paint;
   import android.graphics.PorterDuff.Mode;
   import android.graphics.PorterDuffXfermode;
   import android.graphics.Rect;
   import android.graphics.drawable.BitmapDrawable;
   import android.graphics.drawable.Drawable;
   import android.util.AttributeSet;
   import android.widget.ImageView;

public class CircularImageView extends ImageView {


public CircularImageView(Context ctx, AttributeSet attrs) {
    super(ctx, attrs);
}


@Override
protected void onDraw(Canvas canvas) {

    Drawable drawable = getDrawable();

    if (drawable == null) {
        return;
    }

    if (getWidth() == 0 || getHeight() == 0) {
        return;
    }
    Bitmap b = ((BitmapDrawable) drawable).getBitmap();
    Bitmap bitmap = b.copy(Config.ARGB_8888, true);

    int w = getWidth(), h = getHeight();


    Bitmap roundBitmap = getRoundedCroppedBitmap(bitmap, w);
    canvas.drawBitmap(roundBitmap, 0, 0, null);

   }

public static Bitmap getRoundedCroppedBitmap(Bitmap bitmap, int radius) {
    Bitmap finalBitmap;
    if (bitmap.getWidth() != radius || bitmap.getHeight() != radius)
        finalBitmap = Bitmap.createScaledBitmap(bitmap, radius, radius, false);
    else
        finalBitmap = bitmap;
    Bitmap output = Bitmap.createBitmap(finalBitmap.getWidth(),
            finalBitmap.getHeight(), Config.ARGB_8888);
    Canvas canvas = new Canvas(output);

    final Paint paint = new Paint();
    final Rect rect = new Rect(0, 0, finalBitmap.getWidth(), finalBitmap.getHeight());

    paint.setAntiAlias(true);
    paint.setFilterBitmap(true);
    paint.setDither(true);
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(Color.parseColor("#000000"));
    canvas.drawCircle(finalBitmap.getWidth() / 2 + 0.7f, finalBitmap.getHeight() / 2 + 0.7f,
            finalBitmap.getWidth() / 2 + 0.1f, paint);
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
    canvas.drawBitmap(finalBitmap, rect, rect, paint);


    return output;
   }

   }

您可以在实用程序包中或任何您想要的地方使用此类:

* [This is Chapter 1.......................................................... 1-83](chapter1.md)