双指缩放的ListView的Andr​​oid [英] Pinch Zoom ListView Android

查看:299
本文介绍了双指缩放的ListView的Andr​​oid的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想实现一个捏放大在Android上一个ListView和我现在面临一个问题,当我点击并拖动缩放列表视图。 首先,这里的code:

I'm trying to implement a pinch to zoom in a listview on Android and I'm facing a problem when I click and drag the zoomed list view. First, here's the code:

public class ScaleListView extends ListView {

private ScaleGestureDetector mScaleDetector;
private float mScaleFactor = 1.f;
private float x = 0;
private float y = 0;
private float startx = 0;
private float starty = 0;
private boolean canClick = true;
private float xtranslation = 0;

public ScaleListView(Context context, AttributeSet attrs) {
    super(context, attrs);
    mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {
        startx = ev.getX();
        starty = ev.getY();
    }

    if (ev.getPointerCount() > 1) {
        y = ev.getY();
        x = ev.getX();
    } else if (ev.getAction() == MotionEvent.ACTION_UP) {
        canClick = (ev.getX() - startx) == 0 && (ev.getY() - starty) == 0 && mScaleFactor == 1;
    } else if(ev.getAction() == MotionEvent.ACTION_MOVE){
        xtranslation = ev.getX() - startx;
    }       
    mScaleDetector.onTouchEvent(ev);
    return super.onTouchEvent(ev);
}   
@Override
public void onDraw(Canvas canvas) {
    canvas.scale(mScaleFactor, mScaleFactor, x , y);
    canvas.translate(xtranslation, 0);
    super.onDraw(canvas);
}
private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
    @Override
    public boolean onScale(ScaleGestureDetector detector) {
        canClick = false;
        mScaleFactor *= detector.getScaleFactor();

        // Don't let the object get too small or too large.
        mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 5.0f));

        if (mScaleFactor <= 1) {
            mScaleFactor = 1;
            canClick = true;
        }

        xPos = ScaleListView.this.getWidth() - detector.getFocusX();

        ScaleListView.this.invalidate();
        return true;
    }
}   
public boolean canClick(){
    return canClick;
}

现在的问题是与翻译。它去无限的,我可以水平拖动它,并采取列表视图关闭视口。所以,我无法面对如何把一个边缘到翻译... 感谢您的帮助。

The problem is with the translation. It goes infinite, I can drag it horizontally and take the list view off the viewport. So I can't face how to put an edge to the translation... Thanks for any help.

推荐答案

我只是把一个工人阶级这一点。 让我知道,如果你的作品。 https://github.com/Xjasz/AndroidZoomableViewGroup

I just put together a working class for this. Let me know if it works for you. https://github.com/Xjasz/AndroidZoomableViewGroup

这篇关于双指缩放的ListView的Andr​​oid的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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