为什么bottomMargin / topMargin / rightMargin的行为类似于leftMargin?

时间:2015-10-29 19:05:04

标签: java android

final RelativeLayout rl = (RelativeLayout) findViewById(R.id.rel);
final ImageView circle = (ImageView) findViewById(R.id.circle);
final ViewGroup.MarginLayoutParams screen = (ViewGroup.MarginLayoutParams) rl.getLayoutParams();

和..

        View v;
        v = arrayofImages[i];

        v.setOnTouchListener(new View.OnTouchListener() {
            PointF DownPT = new PointF();
            PointF StartPT = new PointF(); 

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int eid = event.getAction();
                switch (eid) {
                    case MotionEvent.ACTION_MOVE:
                        PointF mv = new PointF(event.getX() - DownPT.x, event.getY() - DownPT.y);
                        v.setX((StartPT.x + mv.x));
                        v.setY( (StartPT.y + mv.y));
                        StartPT = new PointF(v.getX(), v.getY());
                        if (circle.getRight() > v.getX() && circle.getTop() <= v.getY()
                                && circle.getBottom() > v.getY() && circle.getLeft() <= v.getX()) {
                            v.setVisibility(View.INVISIBLE);
                        }
                        if (v.getX() > screen.bottomMargin) {
                            v.setX(screen.bottomMargin);
                        }

                        break;
                    case MotionEvent.ACTION_DOWN:
                        DownPT.x = event.getX();
                        DownPT.y = event.getY();
                        StartPT = new PointF(v.getX(), v.getY());

                        break;
                    case MotionEvent.ACTION_UP:
                        // Nothing have to do
                        break;
                    default:
                        break;
                }

                return true;
            }
     });

所以基本上我试图不让imageView进入屏幕。如果视图v太远,则将其放置在左侧。

  if (v.getX() > screen.leftMargin) {
        v.setX(screen.leftMargin);
       }

这应该是技巧,但它只能用于左边距。如果我尝试这样的事情

   if (v.getX() > screen.rightMargin) {
        v.setX(screen.rightMargin);
       }

它就像是leftMargin(当我在左侧触摸它时会移动我的图像。)

我不知道我做错了什么...请帮助..如果您需要更多代码,我会粘贴,但这就是我认为的重要事项。

1 个答案:

答案 0 :(得分:2)

好吧,您不应该使用#!/usr/bin/env node var child_process = require('child_process'); function runCmd(cmd) { var resp = child_process.execSync(cmd); var result = resp.toString('UTF8'); return result; } var cmd = "curl -s -d '{'title': 'Test' }' -H 'Content-Type: application/json' http://125.196.19.210:3030/widgets/test"; var result = runCmd(cmd); console.log(result); bottomMargin字段。这些是您为topMargin设置的边距。如果您想检查RelativeLayout是否不在View外,请务必使用RelativeLayoutwidth进行核对。

但如果您要做的只是将height保留在View内,则需要使用RelativeLayoutView.getLeft()代替View.getRight() 。这将给出View相对于父级的位置。您可以在逻辑中使用它,而不是使用getX()(以像素为单位返回此视图的可视x位置。)

  

可以通过调用来检索视图的位置   方法getLeft()和getTop()。前者返回左边,或者X,   表示视图的矩形的坐标。后者回归   表示视图的矩形的顶部或Y坐标。   这些方法都返回视图相对于它的位置   家长。例如,当getLeft()返回20时,表示视图   位于其直接左边缘右侧20像素处   父节点。