Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用自定义显示器时的ClassCastException_Android_Universal Image Loader - Fatal编程技术网

Android 使用自定义显示器时的ClassCastException

Android 使用自定义显示器时的ClassCastException,android,universal-image-loader,Android,Universal Image Loader,我试图在我的项目中使用UIL和gridview布局。出于测试目的,我修改了项目本身的代码。我的要求是在第0层显示一个TransitionDrawable,原始位图作为基础图像,在第1层显示一个记号标记。下面是自定义位图显示程序代码 public class customBitmapDisplayer implements BitmapDisplayer { public static Drawable tick; Drawable[] layers = new Drawable[2]; Tra

我试图在我的项目中使用UIL和gridview布局。出于测试目的,我修改了项目本身的代码。我的要求是在第0层显示一个TransitionDrawable,原始位图作为基础图像,在第1层显示一个记号标记。下面是自定义位图显示程序代码

public class customBitmapDisplayer implements BitmapDisplayer
{

public static Drawable tick;
Drawable[] layers = new Drawable[2];
TransitionDrawable mytransition;

@Override
public Bitmap display(Bitmap bitmap, ImageView imageView)
{
BitmapDrawable base_image = new BitmapDrawable(imageView.getResources(), bitmap);
layers[0] = base_image;
layers[1] = tick;

mytransition = new TransitionDrawable(layers);
imageView.setImageDrawable(mytransition);
return bitmap;
}

public customBitmapDisplayer(Drawable tick_mark)
{
tick = tick_mark;
}
}
我还稍微修改了getView。这是代码

if(selected[position])  //selected is a boolean array
{
TransitionDrawable quickTransition = (TransitionDrawable)imageView.getDrawable();
quickTransition.startTransition(0);
}
顺便说一下,我正在使用UIL 1.8.0,默认的ImageConfiguration,DisplayImageOptions修改为与自定义位图显示器一起使用,其代码在上面。我在安卓2.3.4上进行了测试,没有发现任何问题,但在安卓4.0.4上,我在getView方法中得到了一个ClassCastException,表示在“选择”每个图像后滚动整个gridview时,BitmapDrawable无法转换为TransitionDrawable。

这是stacktrace

03-20 20:46:40.797: E/AndroidRuntime(11943): FATAL EXCEPTION: main
03-20 20:46:40.797: E/AndroidRuntime(11943): java.lang.ClassCastException: android.graphics.drawable.BitmapDrawable cannot be cast to android.graphics.drawable.TransitionDrawable
03-20 20:46:40.797: E/AndroidRuntime(11943):    at com.nostra13.example.universalimageloader.ImageGridActivity$ImageAdapter.getView(ImageGridActivity.java:219)
03-20 20:46:40.797: E/AndroidRuntime(11943):    at android.widget.AbsListView.obtainView(AbsListView.java:2019)
03-20 20:46:40.797: E/AndroidRuntime(11943):    at android.widget.GridView.makeAndAddView(GridView.java:1338)
03-20 20:46:40.797: E/AndroidRuntime(11943):    at android.widget.GridView.makeRow(GridView.java:343)
03-20 20:46:40.797: E/AndroidRuntime(11943):    at android.widget.GridView.fillUp(GridView.java:384)
03-20 20:46:40.797: E/AndroidRuntime(11943):    at android.widget.GridView.fillGap(GridView.java:260)
03-20 20:46:40.797: E/AndroidRuntime(11943):    at android.widget.AbsListView.trackMotionScroll(AbsListView.java:4567)
03-20 20:46:40.797: E/AndroidRuntime(11943):    at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:3834)
03-20 20:46:40.797: E/AndroidRuntime(11943):    at android.os.Handler.handleCallback(Handler.java:605)
03-20 20:46:40.797: E/AndroidRuntime(11943):    at android.os.Handler.dispatchMessage(Handler.java:92)
03-20 20:46:40.797: E/AndroidRuntime(11943):    at android.os.Looper.loop(Looper.java:137)
03-20 20:46:40.797: E/AndroidRuntime(11943):    at android.app.ActivityThread.main(ActivityThread.java:4448)
03-20 20:46:40.797: E/AndroidRuntime(11943):    at java.lang.reflect.Method.invokeNative(Native Method)
03-20 20:46:40.797: E/AndroidRuntime(11943):    at java.lang.reflect.Method.invoke(Method.java:511)
03-20 20:46:40.797: E/AndroidRuntime(11943):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-20 20:46:40.797: E/AndroidRuntime(11943):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-20 20:46:40.797: E/AndroidRuntime(11943):    at dalvik.system.NativeStart.main(Native Method)
03-20 20:46:44.377: I/Process(11943): Sending signal. PID: 11943 SIG: 9
ImageGridActivity.java在第219行中有以下代码

TransitionDrawable quickTransition = (TransitionDrawable)imageView.getDrawable();
这是我的getView代码

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    final ImageView imageView;
    if (convertView == null)
    {
        imageView = (ImageView) getLayoutInflater().inflate(R.layout.item_grid_image, parent, false);
    }
    else
    {
        imageView = (ImageView) convertView;
    }

    imageLoader.displayImage(imageUrls[position], imageView, options);

    if(selected[position])
    {

        TransitionDrawable quickTransition = (TransitionDrawable)imageView.getDrawable();
        quickTransition.startTransition(0);

    }
    return imageView;
}

我认为您应该将
getView()
方法更改为以下内容:

@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
    final ImageView imageView;
    if (convertView == null) {
        imageView = (ImageView) getLayoutInflater().inflate(R.layout.item_grid_image, parent, false);
    } else {
        imageView = (ImageView) convertView;
    }

    imageLoader.displayImage(imageUrls[position], imageView, options, new SimpleImageLoadingListener() {
            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                if(selected[position]) {
                    TransitionDrawable quickTransition = (TransitionDrawable)imageView.getDrawable();
                    quickTransition.startTransition(0);
                }
            }
        });
    return imageView;
}

我已经在运行4.1的android emulator中尝试了该代码。问题依然存在。有人请帮帮我。来自LogCat的Stacktrace?请对您的帖子进行编辑,而不是发布带有更新的答案。对此表示抱歉。将确保不再重复。谢谢你,诺斯特拉,我是否也要更改我的位图显示器?不,我想不需要。