Android 来自 url 的毕加索九补丁图像

Android Picasso nine patch image from url

我在将 url 中的九个补丁图像加载到视图中作为视图背景时遇到问题。

我可以从资源中加载 9 个补丁图像,效果很好。

我给毕加索设定的目标如下:

view.setTag(new Target() {

    @Override
    public void onBitmapLoaded(Bitmap bitmap, LoadedFrom from) {
        Log.d("LOG", bitmap.getWidth() + "   " + bitmap.getHeight());

        BitmapDrawable bitmapDrawable = new BitmapDrawable(activity.getResources(), bitmap);

        byte[] ninePatchChunk = bitmap.getNinePatchChunk();
        if (NinePatch.isNinePatchChunk(ninePatchChunk)) {
            view.setBackground(new NinePatchDrawable(activity.getResources(), bitmap, ninePatchChunk, new Rect(), null));
        } else {
            view.setBackground(bitmapDrawable);
        }
    }
}

此功能(从资产加载图像)工作正常:

Picasso.with(activity) 
        .load(R.drawable.nine_patch_button)
        .into(view.getTag()); //view.getTag() is the target

但是我需要从网上下载背景图片。

Picasso.with(activity) 
        .load(uri_to_nine_patch_button)
        .into(view.getTag()); //view.getTag() is the target

在第二种情况下,图像被拉伸并且没有显示为九块图像。当我从 URI 加载图像时,日志输出将始终相同(41、28),但是当我从资产加载图像时,日志输出因设备而异(108、75 和 38、27)。

在具有相同输出的第一种情况下 bitmap.getNinePatchChunk() 为空,图像被拉伸,没有任何效果。

有什么解决方案吗?

此致

我的解决方案是使用这个 class:https://gist.github.com/knight9999/86bec38071a9e0a781ee