2017-11-07 5 views
0

Androidプログラミング/ Javaの新機能私はすでにclassをMainActvityに拡張したときにジェスチャを追加する方法を知りたがっていますか?クラスからインターフェイスを作成する方法

package #####app.myapplication; 

import android.content.Context; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.GestureDetector.SimpleOnGestureListener; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.view.MotionEvent; 
import android.view.GestureDetector; 
import android.support.v4.view.GestureDetectorCompat; 
import android.widget.TextView; 
import android.widget.Toast; 


public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener,GestureDetector.OnDoubleTapListener{ 

    private GestureDetectorCompat mygesture; 
    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; 

    @Override 
    public boolean onSingleTapConfirmed(MotionEvent motionEvent) { 
     return false; 
    } 

    @Override 
    public boolean onDoubleTap(MotionEvent motionEvent) { 
     return false; 
    } 

    @Override 
    public boolean onDoubleTapEvent(MotionEvent motionEvent) { 
     return false; 
    } 

    @Override 
    public boolean onDown(MotionEvent motionEvent) { 
     return false; 
    } 

    @Override 
    public void onShowPress(MotionEvent motionEvent) { 

    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent motionEvent) { 
     return false; 
    } 

    @Override 
    public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { 
     return false; 
    } 

    @Override 
    public void onLongPress(MotionEvent motionEvent) { 

    } 



     @Override 
     public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { 
      } 
     @Override 
     public void onPointerCaptureChanged(boolean hasCapture) { 

     } 


     @Override 
     public boolean onTouchEvent(MotionEvent event) { 
      this.mygesture.onTouchEvent(event); 
      return super.onTouchEvent(event); 
     } 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      Context context = getApplicationContext(); 
      CharSequence text = "Welcome to ####"; 
      int duration = Toast.LENGTH_SHORT; 

      Toast toast = Toast.makeText(context, text, duration); 
      toast.show(); 

      WebView vedant = (WebView) findViewById(R.id.vedant); 
      vedant.loadUrl("http://##.ml"); 
      WebSettings webSettings = vedant.getSettings(); 
      webSettings.setJavaScriptEnabled(true); 
      vedant.setWebViewClient(new WebViewClient()); 
      this.mygesture = new GestureDetectorCompat(this,this); 
      mygesture.setOnDoubleTapListener(this); 



     } 
    } 

私は私がする必要があるジェスチャーの方向に使用することを知っている:

@Override 
    public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { 
     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) { 
        onLeftSwipe(); 
       } 
       // left to right swipe 
       else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE 
         && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
        onRightSwipe(); 
       } 
      } catch (Exception e) { 

      } 
      return false; 
     } 
     return false; 
    } 

しかし、そのために、私は別のクラスSimpleOnGestureListenerを拡張する必要があります。 私はSimpleOnGestureListenerクラスに拡張できませんでしたので、私はinterfaceを作成して実装できると思っていました。それは可能ですか?もしそうなら、どのように?

答えて

0

私が正しく理解していれば、あなたはGestureDetectorCompat 2とパラメータがあります。thisは、あなたの活動であるあなたがmygesture = new GestureDetectorCompat(this,this);を行う現時点で

  • コンテキスト
  • リスナー(GestureDetector.OnGestureListener

を。しかし、なぜあなたのアクティビティをリスナーにしたいのですか?リスナーは、分離したクラスで作成できます。

だから、あなたが行うことができます:

MainActivity

this.mygesture = new GestureDetectorCompat(this, new MyGestureListener()); 

MyGestureListener

public class MyGestureListener extends SimpleOnGestureListener { 

    @Override 
    public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { 
     // ... 
     // Your code 
    } 
} 
+0

MyGestureListenerは、クラスです。なぜMyGestureListener()を使用しますか? – Vedant

+0

別のMyGestureListener.javaファイルを使用する必要がありますか? – Vedant

+0

はい、それはクラスです。オリジナルのSimpleOnGestureListenerにフィーチャーを追加するクラスです。そして、この新しいクラスをGestureDetectorのリスナーとして使用できます。あなたのクラスにあなたが望むものを指定することはできますが、新しいJavaファイルを作成する必要があります。 – Eselfar

関連する問題