标签: picasso

如何在使用Picasso时访问Drawable?

我正在使用Picasso框架来处理我的Android应用中的图像加载.加载图像后,我需要访问Drawable以应用一些屏蔽操作.问题是Picasso将Drawable转换为PicassoDrawable,而简单的转换为Drawable不起作用.

这是我的代码:

        Picasso.with(mContext).load(image.getPath()).into(mImageView, new Callback() {

            @Override
            public void onSuccess() {

                Util.applyMask(imageView);
            }

            @Override
            public void onError() {
            }
        }); 
Run Code Online (Sandbox Code Playgroud)

和Util.applyMask(ImageView)方法:

public static void applyMask(ImageView imageView) {

    // this is where a class cast exception happens since it's actually a PicassoDrawable and not a Drawable
    Bitmap mainImage = ((BitmapDrawable) imageView.getDrawable()).getBitmap();

// ... 
}
Run Code Online (Sandbox Code Playgroud)

Jake Wharton在这个github问题中给出了一个可能的解决方案:https://github.com/square/picasso/issues/38

总而言之,解决方案是:"如果您想直接访问Bitmap,那么您将需要使用Target回调.PicassoDrawable用于允许淡入淡出和调试指示器."

我不确定如何访问Target回调.谁知道如何解决这个问题?

谢谢.

android android-drawable picasso

13
推荐指数
1
解决办法
1万
查看次数

使用视图持有者模式时,毕加索会加载到错误的imageview中

我正在尝试使用Picasso库将外部图像加载到一行中ListView.我有一个ArrayAdapter如下习惯:

public class RevisedBusinessesAdapter extends ArrayAdapter<HashMap<String, String>> {

    Context context;
    int layoutResourceId;
    ArrayList<HashMap<String, String>> data = null;

    public RevisedBusinessesAdapter(Context context, int layoutResourceId,  ArrayList<HashMap<String, String>> data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        RevisedBusinessHolder holder = null;

        if (row == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);
            holder = new RevisedBusinessHolder(); …
Run Code Online (Sandbox Code Playgroud)

android picasso

13
推荐指数
2
解决办法
5451
查看次数

使用Facebook的Fresco加载位图

我正试图在我的Android应用程序中用Fresco替换Picasso.但是我不确定如何使用Fresco简单地加载位图.

毕加索我会做以下几点.

Bitmap poster = Picasso.with(getActivity())
                    .load(url)
                    .resize(Utils.convertDpToPixel(WIDTH,HEIGHT))
                    .centerCrop()
                    .get();
Run Code Online (Sandbox Code Playgroud)

我一直无法弄清楚如何用这个Fresco创建一个Bitmap.有任何想法吗?

android facebook bitmap picasso fresco

13
推荐指数
2
解决办法
2万
查看次数

毕加索可以为我排队吗?

这是关于毕加索行为的一个关键点我不知道.

想象一下,你正在展示十件物品的幻灯片.比如,他们在屏幕上各持有十秒钟.

理想的行为是这样的:在幻灯片放映开始时,我只是执行以下操作:

picasso.get( url1 )
picasso.get( url2 )
picasso.get( url3 )
picasso.get( url4 )
picasso.get( url5 )
picasso.get( url6 )
picasso.get( url7 )
picasso.get( url8 )
picasso.get( url9 )
picasso.get( url10 )
Run Code Online (Sandbox Code Playgroud)

事实上,毕加索会一次一个地排队.

毕加索的行为是什么,如果我告诉它一次预热10个网址?

是否有可能让毕加索一次只做一件事,按顺序 - 是否有这样的选择?

(产生的其他问题是,你可以取消队列,还是......?)


壁画

感谢@alicanozkara在这个页面上的惊人答案我第一次了解到

https://github.com/facebook/fresco

(13k星)无论好坏,我认为毕加索时代可能已经结束了.

android image image-loading android-image picasso

13
推荐指数
3
解决办法
964
查看次数

Android 9.0 Pie的Picasso图像加载问题

我无法使用Android 9.0 Pie中的Picasso库加载图像.实际上,它适用于以下版本.它没有显示任何错误消息.有人用Github分享了他的日志

Picasso.get().setLoggingEnabled(true);
Run Code Online (Sandbox Code Playgroud)

他有消息日志:

2018-10-19 13:13:20.467 24840-24862/com.xyz.test.testpicasso D/ViewContentFactory: initViewContentFetcherClass
2018-10-19 13:13:20.467 24840-24862/com.xyz.test.testpicasso I/ContentCatcher: ViewContentFetcher : ViewContentFetcher
2018-10-19 13:13:20.467 24840-24862/com.xyz.test.testpicasso D/ViewContentFactory: createInterceptor took 0ms
2018-10-19 13:13:20.468 24840-24862/com.xyz.test.testpicasso I/ContentCatcher: Interceptor : Catcher list invalid for com.xyz.test.testpicasso@com.xyz.test.testpicasso.MainActivity@147874166
2018-10-19 13:13:20.468 24840-24862/com.xyz.test.testpicasso I/ContentCatcher: Interceptor : Get featureInfo from config pick_mode
2018-10-19 13:13:20.485 24840-24840/com.xyz.test.testpicasso D/Picasso: Main        created      [R1] Request{https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png}
2018-10-19 13:13:20.492 24840-24864/com.xyz.test.testpicasso D/Picasso: Dispatcher  enqueued     [R1]+6ms 
2018-10-19 13:13:20.492 24840-24866/com.xyz.test.testpicasso D/Picasso: Hunter      executing    [R1]+7ms 
2018-10-19 13:13:20.555 1531-1684/? I/ActivityManager: Displayed com.xyz.test.testpicasso/.MainActivity: +114ms
2018-10-19 13:13:20.555 5475-5603/? D/PowerKeeper.Event: notifyActivityLaunchTime: …
Run Code Online (Sandbox Code Playgroud)

java android picasso

13
推荐指数
2
解决办法
5736
查看次数

Picasso在listview中向上滚动时不断重新加载图像,加载缓慢

我一直在搜索SO线程的答案,但无法从之前的讨论中找出我的问题.我有一个listview加载大约50个图像(它曾经是大约100个图像,但根本没有加载任何图像).从api端点获取我的JSON内容(包括图像URL)后,通过适配器,我的代码将其放入listview中.

目前,有50张图片,当我向下滚动Feed时,毕加索将一次加载一张图片.我觉得好像保持滚动固定在列表视图中的一个项目将使该图像加载更快.然而,当我向上滚动时,它会将占位符放回并重新加载图像.有没有办法解决这个问题?

public class MainActivity extends Activity {
    private List<Post> myPosts = new ArrayList<Post>();
    protected String[] mBlogPostTitles;
    public static final String TAG = MainActivity.class.getSimpleName();//prints name of class without package name

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

        if(isNetworkAvailable()) {
            GetBlogPostsTask getBlogPostsTask = new GetBlogPostsTask(); // new thread
            getBlogPostsTask.execute();// don't call do in background directly
        }else{
            Toast.makeText(this, "Network is unavailable", Toast.LENGTH_LONG).show();
        }
    }
    public boolean isNetworkAvailable() {
        ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = manager.getActiveNetworkInfo();

        boolean isAvailable = false; …
Run Code Online (Sandbox Code Playgroud)

java android picasso

12
推荐指数
2
解决办法
9850
查看次数

RecyclerView与GridLayoutManager和Picasso显示错误的图像

更新#1

添加了hasStableIds(true)并将Picasso更新到版本2.5.2.它没有解决问题.

再生产:

RecyclerView with GridLayoutManager(spanCount = 3).列表项是带有ImageView的CardViews.

当所有项目都不适合时,在一个项目上调用notifyItemChanged的屏幕会导致对onBindViewHolder()的多次调用.一个调用是来自notifyItemChanged其他人的位置,用于屏幕上不可见的项目.

问题:

有时,传递给notifyItemChanged的位置的项目加载了属于不在屏幕上的项目的图像(很可能是由于视图持有者的回收 - 尽管我会假设如果项目保留在原位,那么传递的视图持有者会是一样的).

我发现Jake在这里关于调用load()的其他问题的评论,即使文件/ uri为null.图像加载到每个onBindViewHolder上.

简单示例应用:

git clone https://github.com/gswierczynski/recycler-view-grid-layout-with-picasso.git
Run Code Online (Sandbox Code Playgroud)

点击一个项目调用notifyItemChanged,其参数等于该项目的位置.

码:

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment())
                    .commit();
        }
    }

    public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);

            RecyclerView rv = (RecyclerView) rootView.findViewById(R.id.rv);

            rv.setLayoutManager(new …
Run Code Online (Sandbox Code Playgroud)

android picasso gridlayoutmanager android-recyclerview

12
推荐指数
1
解决办法
4654
查看次数

我可以将Picasso的照片加载到操作栏吗?

我一直在广泛使用毕加索通过互联网检索图像到我的应用程序.现在,我遇到了一种情况,我需要将一个小图像检索到操作栏(就像标题文本旁边的徽标一样).

毕加索可以做到这一点吗?如果是这样,我该怎么做?

android picasso

12
推荐指数
1
解决办法
2347
查看次数

如何使用Picasso加载布局背景

任何人都可以指出一个例子,说明如何使用Picasso以编程方式更改XML布局的背景?我发现的所有示例都能够使用Picasso更新ImageView,但不能更新布局背景.

无法使用Picasso从URL设置LinearLayout BackgroundResource

android android-layout picasso

12
推荐指数
2
解决办法
2万
查看次数

Picasso无法在StorageReference的onSuccess方法中加载图像

在运行时onStart()方法上尝试Picasso时,它通常使用控制台的下载链接从Firebase加载图像.

但是当我尝试在StorageReference onSuccess方法中加载图像时,它就无法工作.

这个类正在扩展片段:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == GALLERY_IN && resultCode == Activity.RESULT_OK) {
        isGranted = true;
        String path = FireStorage.retUID() + "/";
        showIndProgress();
        Uri uri = data.getData();

        StorageReference childPathRef = FireStorage.storageRef.child(path + uri.getLastPathSegment());
        childPathRef.putFile(uri)
                .addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                        if(task.isSuccessful()) {
                            Picasso.with(mContext).load(task.getResult().getDownloadUrl())
                                    .into(profView);

                            Picasso.Builder build = new Picasso.Builder(mContext);
                            build.listener(new Picasso.Listener() {
                                @Override
                                public void onImageLoadFailed(Picasso picasso, Uri uri, Exception …
Run Code Online (Sandbox Code Playgroud)

java android firebase picasso firebase-storage

12
推荐指数
2
解决办法
955
查看次数