Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 排队事件奇怪的行为_Java_Android_Opengl Es 2.0 - Fatal编程技术网

Java 排队事件奇怪的行为

Java 排队事件奇怪的行为,java,android,opengl-es-2.0,Java,Android,Opengl Es 2.0,我在排队缩放事件时遇到问题: ScaleGestureDetector.OnScaleGestureListener fingerScaleGestureListener = new ScaleGestureDetector.OnScaleGestureListener() { @Override public void onScaleEnd(ScaleGestureDetector detector) { //GESTURE finger scale-end

我在排队缩放事件时遇到问题:

ScaleGestureDetector.OnScaleGestureListener fingerScaleGestureListener = new ScaleGestureDetector.OnScaleGestureListener() {

    @Override
    public void onScaleEnd(ScaleGestureDetector detector) {
        //GESTURE finger scale-end
        Log.d(TAG+".scale.end", Float.toString(detector.getScaleFactor()));
    }

    @Override
    public boolean onScaleBegin(ScaleGestureDetector detector) {
        //GESTURE finger scale-begin
        Log.d(TAG+".scale.begin", Float.toString(detector.getScaleFactor()));
        return true;
    }

    @Override
    public boolean onScale(final ScaleGestureDetector detector) {
        //GESTURE finger onscale
        Log.d(TAG+".scale.on", Float.toString(detector.getScaleFactor()));

        glSurfaceView.queueEvent(new Runnable() {

            @Override
            public void run() {
                renderer.zoom(detector.getScaleFactor());

            }
        });

        return true;
    }
};
根据LogCat输出,它工作正常

renderer.zoom()的实现:

缩放手势期间的LogCat:

04-09 19:57:47.057: D/MainActivity.scale.begin(21916): 1.0
04-09 19:57:47.072: D/MainActivity.scale.on(21916): 1.0305684
04-09 19:57:47.072: D/GLRenderer.zoom(21916): 1.0
04-09 19:57:47.087: D/MainActivity.scale.on(21916): 1.0367821
04-09 19:57:47.092: D/GLRenderer.zoom(21916): 1.0
04-09 19:57:47.102: D/MainActivity.scale.on(21916): 1.0497419
04-09 19:57:47.107: D/GLRenderer.zoom(21916): 1.0
04-09 19:57:47.122: D/MainActivity.scale.on(21916): 1.0489701
04-09 19:57:47.122: D/GLRenderer.zoom(21916): 1.0
04-09 19:57:47.137: D/MainActivity.scale.on(21916): 1.035543
04-09 19:57:47.137: D/GLRenderer.zoom(21916): 1.0
04-09 19:57:47.147: D/MainActivity.scale.end(21916): 1.0

为什么缩放函数始终为1.0f?

您依赖于
检测器。getScaleFactor()
来获取比例因子,但在您的情况下比例因子不正确:)

getScaleFactor()
返回相对于上次调用的
onScale()

解决方案非常简单,只需维护一个
float
成员变量(初始化为1.0f),然后

public void run() {
    mScale *= detector.getScaleFactor();
    renderer.zoom(mScale);
}
public void run() {
    mScale *= detector.getScaleFactor();
    renderer.zoom(mScale);
}