2012-04-10 1 views
1

У меня есть пользовательский вид в моем приложении для Android, в котором используется ScaleGestureDetector.SimpleOnScaleGestureListener, чтобы определить, когда пользователь хочет масштабировать вид через 2-х пальцевый щелчок или вне. Это отлично работает, пока я не попробовал тестирование на устройстве Android 2.1, на котором он немедленно сбой, потому что он не может найти класс.Как использовать класс API уровня 8, когда это возможно, и ничего не делать иначе

Я хотел бы поддержать увеличение пинча на 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; 
    } 
} 

вообще на андроид < 2.1. Есть ли умный способ обойти это с помощью java-рефлексии? Я знаю, как проверить, существует ли метод через отражение, но могу ли я проверить, существует ли класс? Как я могу иметь мой

private ScaleGestureDetector mScaleDetector; 

заявил в верхней части моего класса, если API не может даже видеть класс ScaleGestureDetector?

Похоже, что я должен быть в состоянии объявить какой-то внутренний интерфейс, как:

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

А потом как-то ... попробовать расширить ScaleGestureDetector в зависимости от того, если отражение говорит вам, что класс доступен ...

Но я не совсем уверен, куда идти оттуда. Любое руководство или примерный код будут оценены, сообщите мне, если не ясно, что я прошу.

+0

Используйте * android.os.Build.VERSION.SDK_INT * постоянная –

ответ

2

ну, вы можете получить исходный код ScaleGestureDetector и поместить в свой проект, сделать его своим классом и использовать его вместо системы ScaleGestureDetector, это может избежать андроида 2.2 и ниже версии.

вот ScaleGestureDetector исходный код: http://pastebin.com/r5V95SKe

+0

Это отлично! Как я могу найти такие классы в будущем? Это: http://source.android.com/source/downloading.html лучший/единственный способ? – MattF

+0

y, вы правы. – idiottiger

+0

Спасибо alot idiottiger. Ты действительно должен мне пива! – Nitin4Android

1

Build.VERSION.RELEASE

использовать эту строку, чтобы получить версию операционной системы устройства.

И вы можете иметь простой, если есть другой случай. просто проверьте, если версия ОС выше 2.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 
}