在这个“可拖动的弹出窗口”代码中声明什么样的变量?

时间:2015-06-28 04:34:27

标签: android variables android-activity draggable declare

我将以下行(从pskink post 3-2-14)插入到我的弹出式Android活动文件中。这是在已经工作的项目的onCreate()中。 Android Studio希望我将以下3声明为局部变量,参数或字段。 3是:mPopupmCurrentXmCurrentY。如果我只是做试错法,一次尝试一个,那可能有用,是吗?或者有关如何判断使用哪些的想法?

  1. 如果我选择'local',AS会将mPopup更改为'PopupWindow'。
  2. 如果我选择'参数,AS会询问重构。
  3. 以下是代码:

    final View cv = new View(this);
    setContentView(cv);
    
    TextView tv = new TextView(this);
    tv.setBackgroundColor(0xffeeeeee);
    tv.setTextColor(0xff000000);
    tv.setTextSize(24);
    tv.setText("click me\nthen drag me");
    tv.setPadding(8, 8, 8, 8);
    mPopup = new PopupWindow(tv, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    OnTouchListener otl = new OnTouchListener() {
        private float mDx;
        private float mDy;
    
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            int action = event.getAction();
            if (action == MotionEvent.ACTION_DOWN) {
                mDx = mCurrentX - event.getRawX();
                mDy = mCurrentY - event.getRawY();
            } else
            if (action == MotionEvent.ACTION_MOVE) {
                mCurrentX = (int) (event.getRawX() + mDx);
                mCurrentY = (int) (event.getRawY() + mDy);
                mPopup.update(mCurrentX, mCurrentY, -1, -1);
            }
            return true;
        }
    };
    tv.setOnTouchListener(otl);
    
    mCurrentX = 20;
    mCurrentY = 50;
    cv.post(new Runnable() {
        @Override
        public void run() {
            mPopup.showAtLocation(cv, Gravity.NO_GRAVITY, mCurrentX, mCurrentY);
        }
    });
    

1 个答案:

答案 0 :(得分:0)

按照惯例,以“m”开头的变量是成员变量(类字段),而不是局部变量。在这种情况下看起来是正确的,因为它们需要在这些方法之外具有生命周期。