如何在Picasso库中实现捏合缩放?

11
我在当前的项目中使用了Picasso库http://square.github.io/picasso/。一切都正常运作,但我不知道如何对所有从URL加载的图片实现Pinch缩放。老实说,我甚至不知道应该把onClickListener放在哪里。 我的应用程序有多个片段,每个片段都有两个Tabs。第一个Tab有一个ListView,第二个tab显示了一些图片在GridView中:

Bmw.java

public class Bmw2 extends Fragment {

    @Override

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(com.zenyt.R.layout.bmw2, container, false);

        GridView gv = (GridView) rootView.findViewById(R.id.grid_view);
        gv.setAdapter(new com.zenyt.SampleGridViewAdapter(getActivity()));
        gv.setOnScrollListener(new SampleScrollListener(getActivity()));


        return rootView;
    }

示例网格视图适配器

public final class SampleGridViewAdapter extends BaseAdapter {
    private final Context context;
    private final List<String> urls = new ArrayList<String>();

    public SampleGridViewAdapter(Context context) {
        this.context = context;

        // Ensure we get a different ordering of images on each run.
        Collections.addAll(urls, Data.URLS);
        Collections.shuffle(urls);

    }

    @Override public View getView(int position, View convertView, ViewGroup parent) {
        SquaredImageView view = (SquaredImageView) convertView;
        if (view == null) {
            view = new SquaredImageView(context);
            view.setScaleType(CENTER_CROP);
        }

        // Get the image URL for the current position.
        String url = getItem(position);

        // Trigger the download of the URL asynchronously into the image view.
        Picasso.with(context) //
                .load(url) //
                .placeholder(R.drawable.placeholder) //
                .error(R.drawable.error) //
                .fit() //
                .tag(context) //
                .into(view);

        return view;
    }

    @Override public int getCount() {
        return urls.size();
    }

    @Override public String getItem(int position) {
        return urls.get(position);
    }

    @Override public long getItemId(int position) {
        return position;
    }
}

Data.java

final class Data {
    static final String BASE = "http://www.hdcarwallpapers.com/walls/";
    static final String BASE2 = "http://www3.cellsea.com//content/wallpaper/";
    static final String EXT = ".jpg";
    static final String[] URLS = {
            BASE + "prior_design_audi_r8_gt850-wide" + EXT,
            BASE + "2015_audi_rs6_avant_exclusive-wide" + EXT,
            BASE + "2015_audi_tt_coupe_quattro-wide" + EXT,
            BASE + "2015_audi_tt_coupe_quattro-wide" + EXT,
            BASE + "2014_audi_prologue_concept_4-wide" + EXT,
            BASE2 + "2010/WP4ce483c6efa9d" + EXT,

    };

    private Data() {
        // No instances.
    }
}

抱歉我的英语不好。

3个回答

10

Picasso库仅用于从网络加载图像。

你需要使用其他库来处理图像,例如PhotoView或任何支持对图像进行操作的库。


我已经尝试了几个小时在我的项目中实现PhotoView,但是一直没有成功。这并不像对于Picasso那样简单(复制jar文件),然后就完成了。你能帮我一点吗? - Alec
编辑。我找到了PhotoView库-1.2.3,并将其添加到我的项目中。我正在进行实验,但是当我在图像上捏缩时,我一直收到一个错误java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 - Alec
1
我知道这是一个旧帖子,但你可以尝试使用https://github.com/davemorrissey/subsampling-scale-image-view。 - Avijeet

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


    ImageView imageView = (ImageView) findViewById(R.id.imageView);

    Picasso.with(this)
            .load("http://easyway-ev.xyz/images/1.png")
            .into(imageView);//Regular
    photoViewAttacher = new PhotoViewAttacher(imageView);}

这是我的答案,我使用了 Picasso,并且在使用了 photoView 后,还有这个视频介绍如何同步 photoView:点击此处查看链接描述。希望这能对您有所帮助!


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接