[解決済み] グリッドレイアウトにおけるフリングジェスチャーの検出
質問
を取得したい。
fling
ジェスチャー検出をAndroidアプリケーションで動作させる。
私が持っているのは
GridLayout
を含む9つの
ImageView
s. ソースはこちらでご覧いただけます。
ロマンガイのグリッドレイアウト
.
私が取っているそのファイルは、ロマンガイの フォトストリームアプリケーション で、若干の脚色を施しただけです。
単純にクリックするだけの場合は
onClickListener
に対して、それぞれの
ImageView
メインとなるように追加します。
activity
を実装しています。
View.OnClickListener
. を認識するものを実装するのは、限りなく複雑に思えます。
fling
. をまたぐ可能性があるからだと推測されます。
views
?
-
もし私のアクティビティが
OnGestureListener
どうすれば のジェスチャーリスナーとして設定します。 そのGrid
またはImage
ビューを作成します。 を追加します。public class SelectFilterActivity extends Activity implements View.OnClickListener, OnGestureListener { ...
-
もし私のアクティビティが
OnTouchListener
がない場合はonFling
メソッドからoverride
(これは 2つのイベントをパラメータとして を判断することができます。 を使用します)。public class SelectFilterActivity extends Activity implements View.OnClickListener, OnTouchListener { ...
-
をカスタムで作ると
View
のようにGestureImageView
を拡張することでImageView
をアクティビティに伝える方法がわかりません。fling
がビューから発生しました。いずれにせよ、これを試してみたところ、画面をタッチしてもメソッドは呼び出されませんでした。
私は、これがビューを越えて機能する具体的な例が必要なのです。何を、いつ、どのように添付すればよいのでしょうか?
listener
? シングルクリックを検出できるようにする必要があります。
// Gesture detection
mGestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
int dx = (int) (e2.getX() - e1.getX());
// don't accept the fling if it's too short
// as it may conflict with a button push
if (Math.abs(dx) > MAJOR_MOVE && Math.abs(velocityX) > Math.absvelocityY)) {
if (velocityX > 0) {
moveRight();
} else {
moveLeft();
}
return true;
} else {
return false;
}
}
});
画面の上に透明なビューを敷いて、フライングをキャプチャすることは可能でしょうか?
を選択しない場合
inflate
子画像のビューを XML から作成します。
GestureDetector
の新しいサブクラスのコンストラクタ・パラメータとして使用します。
ImageView
を作成するのですか?
これは、非常にシンプルなアクティビティで、その中に
fling
を検出することができます。
SelectFilterActivity(フォトストリームより引用)
.
こんなソースがあったんだ
今までのところ、何もうまくいかなかったので、何かヒントがあればと思いました。
どのように解決するのですか?
ありがとうございます。 コードショウグン そのコードを私の状況に適応させました。
アクティビティに
OnClickListener
を通常通り使用します。
public class SelectFilterActivity extends Activity implements OnClickListener {
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
private GestureDetector gestureDetector;
View.OnTouchListener gestureListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* ... */
// Gesture detection
gestureDetector = new GestureDetector(this, new MyGestureDetector());
gestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
};
}
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Toast.makeText(SelectFilterActivity.this, "Left Swipe", Toast.LENGTH_SHORT).show();
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Toast.makeText(SelectFilterActivity.this, "Right Swipe", Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
// nothing
}
return false;
}
@Override
public boolean onDown(MotionEvent e) {
return true;
}
}
}
メインレイアウトに追加したすべてのビューに、ジェスチャーリスナーをアタッチします。
// Do this for each view added to the grid
imageView.setOnClickListener(SelectFilterActivity.this);
imageView.setOnTouchListener(gestureListener);
オーバーライドされたメソッドがヒットするのを、畏敬の念を持って見てください。
onClick(View v)
のアクティビティと
onFling
のジェスチャー・リスナーの
public void onClick(View v) {
Filter f = (Filter) v.getTag();
FilterFullscreenActivity.show(this, input, f);
}
ポスト「フライング」ダンスはオプションだが、推奨される。
関連
-
aapt2エラー:ログを確認する(具体的な原因の探り方)
-
gitlab 設定エラー。リモートリポジトリから読み込めなかったか、ホストキーの検証に失敗しました。
-
ジャークとして。起動アクティビティを特定できませんでした。デフォルトのアクティビティが見つかりません アクティビティ起動中のエラー
-
android studioが "The activity must be exported or contain an intent-filter" と表示され実行される。
-
Android Bluetooth 開発の基本プロセス
-
超シンプルなアンドロイドのタイムディレイ機能
-
アンドロイドの遅延実行のいくつかの方法
-
Android Studio常见错误之:Rendering Problems/The following classes could not be instantiated
-
Android Studio http://schemas.android.com/apk/res/android 「URIが登録されていません」の解決方法について
-
[解決済み] Androidのレイアウトファイルの「tools:context」とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
NetworkOnMainThreadException
-
[android studio]com.android.ide.common.process.ProcessException: aaptの実行に失敗しました
-
アンドロイドスタジオでJunitのエラー問題を解決する
-
例外「指定された子にはすでに親がいます」の解決方法。removeViewを呼び出す必要があります" の解決方法(ソースコード付き例)
-
プロセス 'command 'F:\sdkbuild-tools', 26.0.2 AAAPT.exe' finished with non-zero exit value 1
-
Android Nで報告されたエラーを解決する: android.os.FileUriExposedException: file:///storage/emulated/0/
-
repo: コマンドが見つかりません
-
アンドロイドのエリプサイズを使用する
-
view.getRootView()の本当の意味とテストについて
-
[解決済み] Android:右から左にスワイプするジェスチャーを処理する方法