如何使用毕加索更新选择器(StateListDrawable)图像 [英] How to update the selector(StateListDrawable) images using picasso

查看:157
本文介绍了如何使用毕加索更新选择器(StateListDrawable)图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用毕加索从自己的网址中加载两个图像,并将其用作状态列表,例如:

I want to load a two images from their own url using picasso and use them as a statelist like:

<item android:drawable="@drawable/sidebar_news_selected" android:state_selected="true"/>
<item android:drawable="@drawable/sidebar_news_selected" android:state_activated="true"/>
<item android:drawable="@drawable/sidebar_news_normal"/>

我该怎么做?

更新:

感谢Maddy,我尝试了他的答案,现在我可以像这样存储库存:

Thanks to Maddy, i tried his answer and now i stock in that like this:

     final StateListDrawable drawable = new StateListDrawable();
        final Picasso picasso = Picasso.with(this.context);
        target_normal = new Target() {
            @Override
            public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                Drawable drawImage = new BitmapDrawable(context.getResources(), bitmap);

                drawable.addState(new int[]{android.R.attr.state_enabled}, drawImage);
                picasso.load(context.getString(R.string.server_address)+dItem.getIconNormal()).into
                        (target_normal);

                target_selected = new Target() {
                    @Override
                    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                        Drawable drawImage = new BitmapDrawable(context.getResources(), bitmap);

                        drawable.addState(new int[]{android.R.attr.state_selected}, drawImage);
                        drawable.addState(new int[]{android.R.attr.state_checked}, drawImage);

                        picasso.load(context.getString(R.string.server_address)+dItem.getIconSelected())
                               .into(target_selected);
                        drawerHolder.icon.setImageDrawable(drawable);
                    }

                    @Override
                    public void onBitmapFailed(Drawable errorDrawable) {

                    }

                    @Override
                    public void onPrepareLoad(Drawable placeHolderDrawable) {

                    }
                };
            }

            @Override
            public void onBitmapFailed(Drawable errorDrawable) {

            }

            @Override
            public void onPrepareLoad(Drawable placeHolderDrawable) {

            }
        };

但它不起作用.

推荐答案

感谢Maddy最终代码如下:

        final StateListDrawable stateListDrawable = new StateListDrawable();
        final Picasso picasso = Picasso.with(this.context);
         // selected and checked state
        target_selected = new Target() {
            @Override
            public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                Drawable drawImage = new BitmapDrawable(context.getResources(), bitmap);
                stateListDrawable.addState(new int[]{android.R.attr.state_selected}, drawImage);
                stateListDrawable.addState(new int[]{android.R.attr.state_activated}, drawImage);
            }

            @Override
            public void onBitmapFailed(Drawable errorDrawable) {

            }

            @Override
            public void onPrepareLoad(Drawable placeHolderDrawable) {

            }
        };
        picasso.load(context.getString(R.string.server_address_http) + dItem.getIconSelected())
               .into(target_selected);
        target_normal = new Target() {
            @Override
            public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                Drawable drawImage = new BitmapDrawable(context.getResources(), bitmap);
                stateListDrawable.addState(StateSet.WILD_CARD, drawImage);
            }

            @Override
            public void onBitmapFailed(Drawable errorDrawable) {

            }

            @Override
            public void onPrepareLoad(Drawable placeHolderDrawable) {

            }
        };
        picasso.load(context.getString(R.string.server_address_http) + dItem.getIconNormal())
               .into(target_normal);
        drawerHolder.icon.setImageDrawable(stateListDrawable);

这篇关于如何使用毕加索更新选择器(StateListDrawable)图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆