• Android: Dragging Popup Window 可移动浮动View


     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
    then 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); } });

    或者:

    layout_counter.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent event)
            {
                if (currentState != State.EDIT_MOVE) return false;
    
                FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view.getLayoutParams();
                if (view.getId() != R.id.layout_counter) return false;
    
                switch (event.getAction())
                {
                    case MotionEvent.ACTION_MOVE:
                        params.topMargin = (int) event.getRawY() - view.getHeight();
                        params.leftMargin = (int) event.getRawX() - (view.getWidth() / 2);
                        view.setLayoutParams(params);
                        break;
    
                    case MotionEvent.ACTION_UP:
                        params.topMargin = (int) event.getRawY() - view.getHeight();
                        params.leftMargin = (int) event.getRawX() - (view.getWidth() / 2);
                        view.setLayoutParams(params);
                        break;
    
                    case MotionEvent.ACTION_DOWN:
                        view.setLayoutParams(params);
                        break;
                }
    
                return true;
            }
        });

    或者:

    public class MyActivity extends Activity implements View.OnTouchListener {
    
    TextView _view;
    ViewGroup _root;
    private int _xDelta;
    private int _yDelta;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        _root = (ViewGroup)findViewById(R.id.root);
    
        _view = new TextView(this);
        _view.setText("TextView!!!!!!!!");
    
        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(150, 50);
        layoutParams.leftMargin = 50;
        layoutParams.topMargin = 50;
        layoutParams.bottomMargin = -250;
        layoutParams.rightMargin = -250;
        _view.setLayoutParams(layoutParams);
    
        _view.setOnTouchListener(this);
        _root.addView(_view);
    }
    
    public boolean onTouch(View view, MotionEvent event) {
        final int X = (int) event.getRawX();
        final int Y = (int) event.getRawY();
        switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:
                RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
                _xDelta = X - lParams.leftMargin;
                _yDelta = Y - lParams.topMargin;
                break;
            case MotionEvent.ACTION_UP:
                break;
            case MotionEvent.ACTION_POINTER_DOWN:
                break;
            case MotionEvent.ACTION_POINTER_UP:
                break;
            case MotionEvent.ACTION_MOVE:
                RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
                layoutParams.leftMargin = X - _xDelta;
                layoutParams.topMargin = Y - _yDelta;
                layoutParams.rightMargin = -250;
                layoutParams.bottomMargin = -250;
                view.setLayoutParams(layoutParams);
                break;
        }
        _root.invalidate();
        return true;
    }}
  • 相关阅读:
    第三周作业
    第二周作业
    第一次作业(2)
    第一次作业
    百度翻译新API C#版在 winform,Asp.Net的小程序
    ajax 里的数据请求
    结合css与javascript来实现手机移动端的屏幕滑动效果
    js公农历互转(1900~2100年)
    webpack命令
    vscode快速输出console.log
  • 原文地址:https://www.cnblogs.com/welhzh/p/4311383.html
Copyright © 2020-2023  润新知