2017-11-07 6 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 매개 변수가 있습니다

  • 문맥을
  • mygesture = new GestureDetectorCompat(this,this);을 순간 리스너 (GestureDetector.OnGestureListener)

어디 this 당신의 활동입니다 . 그런데 왜 당신의 활동이 청취자가되기를 원하십니까? 분리 된 클래스에 리스너를 만들 수 있습니다.

그래서 당신은 할 수 있습니다 :

MainActivity

public class MyGestureListener extends SimpleOnGestureListener { 

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

MyGestureListener이 클래스

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

MyGestureListener. 왜 우리는 MyGestureListener()를 사용합니까 ???? – Vedant

+0

다른 MyGestureListener.java 파일을 사용해야합니까 ??? – Vedant

+0

예, 수업입니다. 하지만 원래 SimpleOnGestureListener에 기능을 추가 할 클래스입니다. 그런 다음이 새 클래스를 GestureDetector의 수신기로 사용할 수 있습니다. 원하는 클래스로 클래스 이름을 지정할 수 있지만 새로운 Java 파일을 만들어야합니다. – Eselfar