0

問題: 最大ズームと最小ズームを制限しました。すべて問題ありませんが、

  • 最小未満にズームしようとすると、ズーム + にするには、同じ量の動きを反対方向に行う必要があります。zoom+も同様です。技術的な面では、次のようになります。

values[Matrix.MSCALE_X]は変更されますが、これは以前は次のとおりです。

m.reset();
m.setScale(sx1, sx1);

ここで、sx1FIXED値です。これが私のコードです:

       public boolean onScale(ScaleGestureDetector detector) {
            try{

            saved_gest_scale = newScale;
            newScale *= detector.getScaleFactor();
            scaleFactor = newScale / oldScale;

            target_img_width *= 1/scaleFactor;

            if (target_img_width > width)//limit max zoom
                {
                    //fit on screen:
                        m = new Matrix();
                        m.reset();
                        float w_coef = img_width / width;
                        float sx1 = 1/w_coef;
                        m.setScale(sx1, sx1);
                    ///========

                    //apply new size
                    float sx2 = target_img_width/width;
                    sx2 = 1/sx2;
                    m.setScale(sx2, sx2);

                    float[] values = new float[9];
                    m.getValues(values);

                    //center image:
                    float globalX = values[Matrix.MTRANS_X];
                    float globalY = values[Matrix.MTRANS_Y];
                    float wid = values[Matrix.MSCALE_X]*img_width;
                    float heig = values[Matrix.MSCALE_Y]*img_height;
                    m.postTranslate(width/2 - wid/2, height/2-heig/2);

                    if (wid <= width)//limit min-zoom
                    {
                        newScale = sx1;
                        m = new Matrix();
                        m.reset();
                        m.setScale(sx1, sx1);
                        wid = sx1*img_width;
                        heig = sx1*img_height;
                        debug.setText(wid + "<width" + "mx=" + values[Matrix.MSCALE_X] );
                        m.postTranslate(width/2 - wid/2, height/2-heig/2);
                    }
                        iw.setImageMatrix(m);
                }

            oldScale = newScale;
            }catch (Exception xx)
            {
                debug.setText("detector "+ xx.toString());
            }
            return  true;
        }

助けてください。

4

1 に答える 1

0

scaleメソッドで変更される1 つのパラメーターを使用しますonScale。また、2 つの定数minScaleと を使用しmaxScaleます。メソッドで、新しい縮尺が許容範囲内に収まるかどうかを確認し、onScale収まる場合は、新しい縮尺で画像を再描画します。

現在、あなたのコードは混乱しています。なんとなくlimit min-zoomチェックは の中にありますlimit max zoomが、スケーリングの方法はあちこちに散らばっています。したがって、新しいスケールが最新のものになり、なぜそれがうまくいかないのかは非常に不潔です。

于 2013-09-17T05:27:52.367 に答える