【问题标题】:How to create an interface from a class如何从类创建接口
【发布时间】:2017-11-07 10:17:46
【问题描述】:

我是 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 然后实现它。那可能吗。如果有怎么办?

【问题讨论】:

    标签: java android interface gesturedetector


    【解决方案1】:

    如果我理解正确,您有一个带有 2 个参数的 GestureDetectorCompat

    • 上下文
    • 一个听众 (GestureDetector.OnGestureListener)

    目前您正在执行mygesture = new GestureDetectorCompat(this,this);,其中this 是您的活动。但是为什么你想让你的 Activity 成为监听器呢?你可以在一个单独的类中创建一个监听器。

    所以你可以这样做:

    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
        }
    }
    

    【讨论】:

    • 是的,这是一门课。但是您自己的类,您将在其中向原始 SimpleOnGestureListener 添加功能。然后你可以在 GestureDetector 中使用这个新类作为监听器。你可以随意命名你的类,但是你需要创建一个新的 Java 文件。
    • 工作就像一个魅力,只是想知道为什么使用 () ,当它是一个类?我们仅将其用于功能吗??
    • 因为您正在创建该类的新实例。假设你有一个这样的 A 类: public class A { public A(){ // A 的默认构造函数} public A(int i) { // some code}}。现在您可以像这样实例化类 A a = new A();或类似的 A b = new A(42);
    猜你喜欢
    • 2012-01-15
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 2015-09-07
    • 2019-09-27
    相关资源
    最近更新 更多