Ham SDK'ya cam verilerden erişmek için Android SDK kullanılabilir.
Ancak GDK, Glass'taki dokunma, kaydırma ve kaydırma gibi yaygın hareketleri otomatik olarak algılayan bir hareket dedektörü sunar.
Ayrıca basit hareketler, hareket dedektörü kullanılmadan kolayca işlenmesi için varsayılan olarak D-pad etkinliklerine dönüştürülür.
Hareketleri D-pad tuş etkinlikleri olarak algılama
Varsayılan olarak Glass sistemi, basit hareketleri D-pad tuş etkinliklerine çevirir. Bu, aşağıdaki hareketleri D-pad tuşları olarak işlemek için onKeyDown()
ve onKeyUp()
etkinliklerini veya görünümlerini dinlemenize olanak tanır:
- Şu dile çevirir:
KEYCODE_DPAD_CENTER
. - Kamera düğmesine basıldığında
KEYCODE_CAMERA
sesi gösterilir. - Aşağı kaydırdığınızda
KEYCODE_BACK
harfi görünür.
Aşağıdaki snippet, kullanıcıların dokunmatik alana dokunduğunda algılanır:
public class MyActivity extends Activity {
...
@Override
public boolean onKeyDown(int keycode, KeyEvent event) {
if (keycode == KeyEvent.KEYCODE_DPAD_CENTER) {
// user tapped touchpad, do something
return true;
}
...
return super.onKeyDown(keycode, event);
}
}
Tekil görünümlerde dokunmaları algılamanın bir yolu,
görünüme OnClickListener
uygulamaktır. Kullanıcılar dokunmatik alana (D-pad'in orta düğmesi tıklaması olarak çevrildi) görünüme odaklanıldığında dokunduğunda, etkinlik bir OnClickListener
ile etkinliği işleyebilir.
public final class MyActivity extends Activity implements OnClickListener {
View cardView;
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
cardView = new Card(this).setText("Tap to carry out an action").getView();
// To receive touch events from the touchpad, the view should be focusable.
cardView.setOnClickListener(this);
cardView.setFocusable(true);
cardView.setFocusableInTouchMode(true);
setContentView(cardView);
}
@Override
protected void onResume() {
// To receive touch events from the touchpad, the view should have focus.
cardView.requestFocus();
super.onResume();
}
@Override
public void onClick(View v) {
// perform desired action
}
}
Hareket dedektörü ile hareketleri algılama
Hareket dedektörleri, basit hareketlerin yanı sıra birden fazla parmak kullanan veya kaydırma yapan daha karmaşık hareketleri tespit etmenizi sağlar. Karmaşık hareketlere karşılık gelen bir D-pad anahtarı yoktur.
motionDetector, Hareket konusunda bilgilendirilmek için uygulayabileceğiniz dinleyici arayüzleri sunar.
Etkinlik düzeyindeki hareketleri algılama
Kullanıcı arayüzünüzün hangi bölümüne odaklandığınızı önemsemiyorsanız hareket düzeyinde etkinlik algılamak uygundur. Örneğin, kullanıcılar dokunmatik alana dokunduğunda bir menü açmak istiyorsanız hangi görünümün odak noktasında olduğundan bağımsız olarak etkinliğin içindeki MotionEvent
simgesini kullanmanız gerekir.
Aşağıdaki örnek:
- Tanınan hareketleri işlemek için dinleyicileri uygulayan bir
GestureDetector
oluşturur. - Hareket etkinliklerini hareket dedektörünün
onMotionEvent()
yöntemine iletmek için etkinliğinonGenericMotionEvent()
yöntemini geçersiz kılar.
Bir hareket etkinliği gerçekleştiğinde sistem, etkinliği hareket algılayıcıya iletir. Tanınırsa hareket dedektörü etkinliği işlemek için uygun dinleyiciyi bilgilendirir.
public class MainActivity extends Activity {
private GestureDetector mGestureDetector;
// ...
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
mGestureDetector = createGestureDetector(this);
}
private GestureDetector createGestureDetector(Context context) {
GestureDetector gestureDetector = new GestureDetector(context);
//Create a base listener for generic gestures
gestureDetector.setBaseListener( new GestureDetector.BaseListener() {
@Override
public boolean onGesture(Gesture gesture) {
if (gesture == Gesture.TAP) {
// do something on tap
return true;
} else if (gesture == Gesture.TWO_TAP) {
// do something on two finger tap
return true;
} else if (gesture == Gesture.SWIPE_RIGHT) {
// do something on right (forward) swipe
return true;
} else if (gesture == Gesture.SWIPE_LEFT) {
// do something on left (backwards) swipe
return true;
}
return false;
}
});
gestureDetector.setFingerListener(new GestureDetector.FingerListener() {
@Override
public void onFingerCountChanged(int previousCount, int currentCount) {
// do something on finger count changes
}
});
gestureDetector.setScrollListener(new GestureDetector.ScrollListener() {
@Override
public boolean onScroll(float displacement, float delta, float velocity) {
// do something on scrolling
}
});
return gestureDetector;
}
/*
* Send generic motion events to the gesture detector
*/
@Override
public boolean onGenericMotionEvent(MotionEvent event) {
if (mGestureDetector != null) {
return mGestureDetector.onMotionEvent(event);
}
return false;
}
}
Görünüm düzeyindeki hareketleri algılama
Görünüm düzeyinde hareketlerin algılanması, hangi görünüme odaklanıldığına bağlı olarak farklı işlemler yapmak istediğinizde uygundur.
Aşağıdaki örnek:
dispatchGenericFocusedEvent()
yöntemini geçersiz kılan özel bir görünüm oluşturur. Bir hareket etkinliği gerçekleştiğinde, bu yöntem hareket etkinliğini hareket algılayıcıya iletir.- Odaklanıldığında etkinlikleri algılayabilmesi için görünümü odaklanılabilir olarak tanımlar.
- Tanınan hareketleri işlemek için işleyicileri uygulayan bir
GestureDetector
oluşturur.
Hareket dedektörü, görüntü odaktayken bir hareketi tanıdığında, hareket dedektörü uygun dinleyiciyi çağırır.
/**
* TextView that handles touchpad input (currently only TAP).
*/
public class TouchpadHandlingTextView extends TextView
implements OnAttachStateChangeListener{
private final GestureDetector mTouchDetector;
public TouchpadHandlingTextView(Context context, AttributeSet attrs) {
super(context, attrs);
mTouchDetector = createGestureDetector(context);
// must set the view to be focusable
setFocusable(true);
setFocusableInTouchMode(true);
}
public TouchpadHandlingTextView(Context context) {
this(context, null);
}
@Override
public void onViewAttachedToWindow(View v) {
requestFocus();
}
@Override
public void onViewDetachedFromWindow(View v) {
}
/**
* Pass a MotionEvent into the gesture detector
*/
@Override
public boolean dispatchGenericFocusedEvent(MotionEvent event) {
if (isFocused()) {
return mTouchDetector.onMotionEvent(event);
}
return super.dispatchGenericFocusedEvent(event);
}
/**
* Create gesture detector that triggers onClickListener. Implement
* onClickListener in your Activity and override
* onClick() to handle the "tap" gesture.
*/
private GestureDetector createGestureDetector(Context context) {
GestureDetector gd = new GestureDetector(context);
gd.setBaseListener(new GestureDetector.BaseListener() {
@Override
public boolean onGesture(Gesture gesture) {
if (gesture == Gesture.TAP) {
return performClick();
}
return false;
}
});
return gd;
}
}