1

ユーザーが 2 本の指でピンチインまたはピンチアウトしてビューを拡大または縮小するタイミングを検出するために、ScaleGestureDetector.SimpleOnScaleGestureListener を使用する Android アプリのカスタム ビューがあります。これは、クラスが見つからないためにすぐにクラッシュする Android 2.1 デバイスでテストするまではうまく機能します。

2.2+ でピンチ ズームをサポートし、デフォルトでピンチ ズームなし <2.1 をサポートしたいと思います。問題は、私が宣言できないことです:

private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener
{
    @Override
    public boolean onScale(ScaleGestureDetector detector)
    {
        MyGameActivity.mScaleFactor *= detector.getScaleFactor();

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

        invalidate();
        return true; 
    }
}

Android <2.1ではまったく。Javaリフレクションを使用してこれを回避する賢い方法はありますか? リフレクションを介してメソッドが存在するかどうかをテストする方法は知っていますが、クラスが存在するかどうかをテストできますか? どうすれば私のものを手に入れることができますか

private ScaleGestureDetector mScaleDetector;

API が ScaleGestureDetector クラスを認識できない場合、クラスの先頭で宣言されていますか?

次のようなある種の内部インターフェースを宣言できるはずです。

public interface CustomScaleDetector
{
    public void onScale(Object o);
}

そしてどういうわけか...リフレクションがクラスにアクセスできることを示しているかどうかに応じて、ScaleGestureDetectorを拡張してみてください...

しかし、そこからどこへ行けばいいのかよくわかりません。ガイダンスやサンプルコードをいただければ幸いです。私が求めているものが明確でない場合はお知らせください。

4

3 に答える 3

2

ソースコードを取得ScaleGestureDetectorしてプロジェクトに入れ、それを独自のクラスとして作成し、これを system の代わりに使用するとScaleGestureDetector、Android 2.2 以下のバージョンを回避できます。

ここにScaleGestureDetectorソースコードがあります: http://pastebin.com/r5V95SKe

于 2012-04-10T03:05:39.643 に答える
2

2 つのクラス A と B を作成します。A は 2.2+ 用、B は 2.1 以前のバージョン用です。

if(Build.VERSION.SDK_INT < 8) //2.2 version is 8
{
  Use the class B
}
else
{
 Use class A
}
于 2012-04-10T03:58:25.003 に答える
1

ビルド.バージョン.リリース

上記の行を使用して、デバイスの OS バージョンを取得します。

そして、if else ケースをシンプルにすることができます。OS のバージョンが 2.2 を超えているかどうかを確認してください。ズームインとズームアウトが可能です。それ以外の場合は、ズームインまたはズームアウトしません。

于 2012-04-10T03:41:02.860 に答える