Android应用中自定义ImageView的ClassNotFoundException

Dhr*_*ubo 8 android

我得到以下例外......

08-12 14:19:41.564: ERROR/AndroidRuntime(797): Caused by: java.lang.ClassNotFoundException: com.widgets.utils.CustomRoundedCornerImageView in loader dalvik.system.PathClassLoader[.]
Run Code Online (Sandbox Code Playgroud)

我创建了一个自定义的ImageView,即com.widgets.utils.CustomRoundedCornerImageView,并在布局xml中使用它.CustomRoundedCornerImageView.java与其他类在类路径中.

CustomRoundedCornerImageView.java

package com.widgets.utils;

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

public class CustomRoundedCornerImageView extends ImageView {

    public CustomRoundedCornerImageView(Context context) {
        super(context);
    }
    public CustomRoundedCornerImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomRoundedCornerImageView(Context context, AttributeSet attrs,
            int defStyle) {
        super(context, attrs, defStyle);
    }


    @Override
    protected void onDraw(Canvas canvas) {
            Drawable drawable = getDrawable();

            Bitmap b =  ((BitmapDrawable)drawable).getBitmap() ;
            Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true);

            Bitmap roundBitmap = getRoundedCornerBitmap(bitmap,30);
            canvas.drawBitmap(roundBitmap, 0,0 , null);
    }

    public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) {
        Bitmap roundedBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap
                .getHeight(), Config.ARGB_8888);
        Canvas canvas = new Canvas(roundedBitmap);

        final int color = 0xff424242;
        final Paint paint = new Paint();
        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
        final RectF rectF = new RectF(rect);
        final float roundPx = pixels;

        paint.setAntiAlias(true);
        canvas.drawARGB(0, 0, 0, 0);
            paint.setColor(color);
        canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, paint);

        return roundedBitmap;
    }

}
Run Code Online (Sandbox Code Playgroud)

layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/picture_frame"
        android:layout_width="70px"
        android:layout_height="70px"
        android:gravity="center"
        android:layout_marginTop="5px"
        android:layout_marginLeft="40px"
        android:focusable="false"
        android:visibility="invisible"
        android:background="@drawable/picture_frame">
    <com.widgets.utils.CustomRoundedCornerImageView 
            android:id="@+id/picture"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerCrop"
            android:focusable="false" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

你能帮我解释为什么我得到ClassNotFoundException吗?

Tof*_*mad 20

<com.widgets.utils.CustomRoundedCornerImageView 
        android:id="@+id/picture"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:focusable="false" />
Run Code Online (Sandbox Code Playgroud)

在这你必须改变

<ImageView class="com.widgets.utils.CustomRoundedCornerImageView" 
        android:id="@+id/picture"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:focusable="false" />
Run Code Online (Sandbox Code Playgroud)

  • 有理由为什么必须这样做?它会导致进一步的问题,并且与所有Android教程信息相矛盾 (6认同)