Ham verilere Glass dokunmatik yüzeyden erişmek için Android SDK'sı.
Ancak GDK, şu hareket dedektörü: Glass'ta yaygın olarak kullanılan hareketleri otomatik olarak algılar: dokunma, kaydırma ve kaydırma.
Bunun yanı sıra basit hareketler de D-pad etkinlikleri olmadan kolay işleme için varsayılan olarak hareket dedektörünü kullanabilirsiniz.
Hareketleri, D-pad'deki tuş etkinlikleri olarak algılama
Varsayılan olarak Glass sistemi basit hareketleri D-pad'deki önemli etkinliklere dönüştürür. Bu
dinlemenize olanak sağlar
onKeyDown()
ve onKeyUp()
D-pad tuşları olarak aşağıdaki hareketleri işlemek için etkinlikler veya görünümler:
- Şu dile çevrilir'e dokunun:
KEYCODE_DPAD_CENTER
. - Kamera düğmesine basıldığında
KEYCODE_CAMERA
diline çevrilir. - Aşağı kaydırıp
KEYCODE_BACK
diline çeviri yapın.
Aşağıdaki snippet, kullanıcılar dokunmatik alana dokunduğunda algılıyor:
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);
}
}
Ayrı ayrı görünümlere dokunmaları tespit etmenin bir yöntemi de
OnClickListener
görünüm için. Kullanıcılar dokunmatik alana dokunduğunda (d-pad'in ortasındaki düğmeyi tıklaması olarak çevrilir)
odaklanılmış haldeyken, bu görünüm etkinliği
OnClickListener
.
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 algılayıcı ile hareketleri algılama
Hareket algılayıcıları, basit hareketleri de algılamanızı sağlar karmaşık hareketler olabilir, örneğin, birden fazla parmak kullanan veya kaydırma yapanlar gibi. Karmaşık hareketlere karşılık gelen bir D-pad tuşu yoktur.
GestureDetector kullanabileceğiniz işleyici arayüzleri sağlar bir Hareket ile ilgili bildirim almak için.
Etkinlik düzeyindeki hareketleri algılama
Etkinlik düzeyindeki hareketleri algılamak uygun
olmazsa olmazınızın
sahip. Örneğin, bir menü açtığınızda
kullanıcılar dokunmatik alana dokunduğunda,
odaklanılan görünümden bağımsız olarak
MotionEvent
inceleyebilirsiniz.
Aşağıdaki örnek:
GestureDetector
oluşturur dinleyicileri tanınan hareketleri işleme koymayı uygulayan bir uygulamadır.- Hareket etkinliklerini hareket algılayıcının cihazına aktarmak için etkinliğin
onGenericMotionEvent()
yöntemini geçersiz kılaronMotionEvent()
yöntemini kullanabilirsiniz.
Bir hareket etkinliği gerçekleştiğinde, sistem bunu hareket algılayıcısına iletir. Eğer olduğunda, hareket dedektörü uygun dinleyiciye işlemi etkinliği tıklayın.
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
Aşağıdaki durumlarda hareketleri görünüm düzeyinde algılamak uygundur: odaklandığınız görünüme bağlı olarak farklı şeyler yapmak istediğinizi varsayalım.
Aşağıdaki örnek:
- Oluşturduğu
dispatchGenericFocusedEvent()
yöntemidir. Bir hareket etkinliği gerçekleştiğinde, bu yöntem hareket etkinliğini hareket algılayıcısına iletir. - Odaklanıldığında etkinlikleri algılaması için görünümü odaklanılabilir olarak tanımlar.
- Aşağıdakileri uygulayan bir
GestureDetector
oluşturur: tanınan hareketleri işleme koymalarını sağlar.
Hareket dedektörü, görünüm odaktayken bir hareketi tanırsa, 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;
}
}