【问题标题】:Keep a button within boundaries将按钮保持在边界内
【发布时间】:2017-08-06 05:10:46
【问题描述】:

我仍然是 android 编程的新手(比如 3 周大),但我正在慢慢掌握事情的窍门。我在不同的网站上寻找答案,但我还没有找到任何答案。

到目前为止我的 Java 代码(至少是相关的):

view = (ImageView)findViewById(R.id.imageView3);
backgroundImageName = String.valueOf(view.getTag());

view.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        int myNewX = (int)event.getX(); //this line and the next get the X & Y coordinates of wherever the mouse clicked
        int myNewY = (int)event.getY();
        Button button = (Button)findViewById(R.id.add_text);

        // find a way to keep the button within the borders of the white square
        if (event.getAction() == MotionEvent.ACTION_UP) { //checks if the mouse click was released
            button.setVisibility(View.VISIBLE);
            button.setX(myNewX - 160); //this line and the next set the coordinates of the button (plus the adjustment)
            button.setY(myNewY + 70); //to make the button by above and in the middle of where the mouse clicked
        }
        else
        {
            button.setVisibility(View.INVISIBLE);
        }
        return true;
    }
});

到目前为止我的 XML 代码(至少是相关的):

<ImageView
    android:id="@+id/imageView3"
    android:layout_width="450dp"
    android:layout_height="450dp"
    android:layout_marginBottom="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginTop="8dp"
    android:contentDescription="@string/white_background"
    android:tag="white"
    android:visibility="invisible"
    app:layout_constraintBottom_toBottomOf="@+id/button"
    app:layout_constraintLeft_toLeftOf="@+id/imageView2"
    app:layout_constraintRight_toRightOf="@+id/imageView2"
    app:layout_constraintTop_toTopOf="@+id/textView"
    app:srcCompat="@mipmap/white" />

<Button
    android:id="@+id/add_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/add_text"
    android:visibility="invisible"
    tools:ignore="MissingConstraints"
    tools:layout_editor_absoluteY="71dp"
    tools:layout_editor_absoluteX="16dp" />

我想要做的是将按钮保持在图片所示的边界内,但我不知道如何做到这一点。我知道它应该如何工作是:

If mouseclick (the event) is outside the border { set the x coordinate of the button to the edge of the border and the same for the y coordinate }

我一直试图让它正常工作,但它只是拒绝。如果有人可以帮助我找出使其工作所需的代码,我将非常感谢您的帮助。

谢谢

【问题讨论】:

    标签: java android xml button


    【解决方案1】:

    首先创建边界检查,然后执行您的任务:

    view.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        //obtain the boundaries of the view
        if(event.getAction() == MotionEvent.ACTION_DOWN){
        rect = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
    
        }
        if (event.getAction() == MotionEvent.ACTION_UP){
           //Catches out of boundary user's movement.
           if(!rect.contains(v.getLeft() + (int) event.getX(), v.getTop() + 
            (int) event.getY())){
    
           button.setVisibility(View.VISIBLE);
           //perform your other calculations
    
        }
    
        return true;
    }
    

    });

    注意:从 API 14 开始,您可以使用:Android MotionEvent 的 ACTION_HOVER_ENTER: https://developer.android.com/reference/android/view/MotionEvent.html#ACTION_HOVER_ENTER

    【讨论】:

      猜你喜欢
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-31
      • 2015-07-21
      • 2012-10-23
      • 1970-01-01
      相关资源
      最近更新 更多