我无法实现OnTouchListener来拖动PopUp窗口

时间:2018-05-03 08:08:52

标签: java android draggable popupwindow ontouchlistener

我想拖动我的PopUpWindows。所以我尝试实现演示应用程序从这里拖动一个简单的PopUp窗口:

https://questdot.com/android-popup-floating-window-tutorial/

当我将监听器添加到视图

时出现问题

popVideospeedView.setOnTouchListener(new View.OnTouchListener()

然后 View.OnTouchListener()会出现红色下划线并发出警告:

Class'从OnTouchListener派生的匿名类'必须被声明为abstract或在'OnTouchListener'中实现抽象方法'onTouch(View,MotionEvent)'

它还拒绝 @Override 表示无法覆盖,并且还说它无法解析 MotionEvent

此外,图书馆 android.view.View.OnTouchListener 来自:

导入android.view.View.OnTouchListener; 未使用

我的代码非常类似于从引用的链接运行的代码,他们的迷你应用程序在Android Studio SDK中编译并运行良好。但我的代码拒绝了 触控监听器的实现。我能做错什么?

我的PopUp Window实现的代码是:

public void functionVideospeedPopupWindow() {
    try {
        LayoutInflater popVideospeedLayoutInflater = (LayoutInflater) LMMoviesMainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View popVideospeedView = popVideospeedLayoutInflater.inflate(R.layout.popvideospeed, null);
        final PopupWindow popVideospeedPopupWindow = new PopupWindow(popVideospeedView, LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, true);

        popVideospeedPopupWindow.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.colorStone)));
        popVideospeedPopupWindow.setOutsideTouchable(false);
        popVideospeedPopupWindow.setFocusable(false);

        Button videospeedCloseButton = (Button) popVideospeedView.findViewById(R.id.popvideospeed_closeButton);
        popVideospeedPopupWindow.showAtLocation(popVideospeedView, Gravity.CENTER, 0, 0); // 8:Margin to the left?. 18 comienza el texto utube

        popVideospeedView.setOnTouchListener(new View.OnTouchListener() {
             @Override
                public boolean onTouch(View v, MotionEvent event) {
                    // event code...
                    return true;
                }
         });

        videospeedCloseButton.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                popVideospeedPopupWindow.dismiss();
            }
        });

    } catch (Exception e){}
} // End of functionVideospeedPopupWindow()

我注意到运行示例的唯一区别是它们的PopUp代码在类的 onCreate 扇区内声明,而我的PopUp Window代码位于由用户稍后在App中。这是一个相关的区别吗?如果是,那么如何或为什么?

最后,如果我添加: OnTouchListener (或者 View.OnTouchListener ?)在:实现类中,在: 公共课......等。 ...实现OnTouchListener ,它以红色下划线并发出警告:

类'MyMainActivity'必须声明为abstract或在'OnTouchListener'中实现抽象方法'onTouch(View,MotionEvent)'

我知道要实现 OnTouchListener 接口,我应该添加如下结构:

public boolean onTouch(View v,MotionEvent event){...

但是如何在PopUp方法之外声明一个带有 onTouc h的PopUp窗口? 非常感谢任何想法和您的兴趣。

1 个答案:

答案 0 :(得分:0)

解决了!当我尝试使用 Alt+Enter 时,事实证明Android Studio没有为MotionEvent添加库。所以我手动添加了库: import android.view.MotionEvent;,现在View.OnTouchListener没有生成任何警告。非常感谢您的帮助,我希望这个案例可以帮助其他人克服这个愚蠢的错误。干杯