Glass のタッチパッドから元データにアクセスするには、 ダウンロードします
ただし、GDK には 検出機能を実装して 一般的なジェスチャーを、 タップ、スワイプ、スクロールなどです
また、単純なジェスチャーが Google Cloud の D-pad イベントをデフォルトで設定し、変更なしで簡単に処理 生成します。
ジェスチャーを D-pad キーイベントとして検出する
デフォルトでは、Glass システムは簡単なジェスチャーを D-pad のキーイベントに変換します。この
では、
onKeyDown()
および onKeyUp()
イベントは、次のジェスチャーを D-pad キーとして処理します。
- [訳文の言語]
KEYCODE_DPAD_CENTER
をタップします。 - カメラボタンを押すと
KEYCODE_CAMERA
になります。 - 下にスワイプすると、
KEYCODE_BACK
になります。
次のスニペットは、ユーザーがタッチパッドをタップしたことを検出します。
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);
}
}
個々のビューのタップを検出する方法は、
OnClickListener
指定します。ユーザーがタッチパッドをタップしたとき(D-pad の中央ボタンのクリックに変換)
ビューがフォーカスされている場合、ビューは
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
}
}
ジェスチャー検出機能によるジェスチャー検出
ジェスチャー検出機能では、シンプルなジェスチャーも検出できます。 複雑なジェスチャーのように 指やスクロールなどの操作を行えます複雑 ジェスチャーに対応する D-pad キーはありません。
GestureDetector リスナー インターフェースが用意されており、 ジェスチャーの通知を受け取る必要があります。
アクティビティ レベルの操作の検出
アクティビティ レベルでジェスチャーを検出することが適切である
UI のどの部分を
焦点を当てています。たとえば、CPU 使用率のしきい値を超えたメニューを
どのビューにフォーカスがある場合でも
MotionEvent
を処理します。
使用します。
次の例では、以下を実行します。
GestureDetector
を作成します。 これは、認識されたジェスチャーを処理するリスナーを実装するものです。- アクティビティの
onGenericMotionEvent()
メソッドをオーバーライドして、モーション イベントをジェスチャー検出機能に渡します。onMotionEvent()
メソッドを使用します。
モーション イベントが発生すると、システムはそれをジェスチャー検出機能に渡します。条件 認識されると、ジェスチャー検出機能は適切なリスナーに処理を通知します。 追加できます。
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;
}
}
ビューレベルの操作の検出
ビューレベルで操作を検出するのは、 どのビューがフォーカスされているかによって、異なる処理を実行できます。
次の例では、以下を実行します。
- オーバーライドするカスタムビューを作成し、
dispatchGenericFocusedEvent()
メソッドを呼び出します。モーション イベントが発生すると、このメソッドはモーション イベントをジェスチャー検出機能に渡します。 - ビューをフォーカス可能として宣言し、フォーカスを取得したときにイベントを検出できるようにします。
- 次の実装を行う
GestureDetector
を作成します。 認識されたジェスチャーを処理できます。
ビューにフォーカスがあるときにジェスチャー検出機能が動きを認識すると、適切なリスナーが呼び出されます。
/**
* 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;
}
}