gpt4 book ai didi

java - 如何将X和Y保持在布局 View 内?

转载 作者:行者123 更新时间:2023-12-01 13:32:03 24 4
gpt4 key购买 nike

我有一个 FrameLayout,其中有一个用户可以拖动的拇指图像。

拇指宽度为 10dp,高度为 10dp。

    f = (FrameLayout) findViewById(R.id.fl);
f.setOnTouchListener(flt);

f.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
width = f.getMeasuredWidth();
height = f.getMeasuredHeight();

@Override
public boolean onTouch(View v, MotionEvent event) {

float x = event.getX();
float y = event.getY();

switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (x<0) {
x = x + 10;
iv.setX(x);
iv.setY(y);
}
if (x>f.getWidth()) {
x = x - 10;
iv.setX(x);
iv.setY(y);
}
else {
iv.setX(x);
iv.setY(y);
}
// Write your code to perform an action on down
break;
case MotionEvent.ACTION_MOVE:
if (x<0) {
x = x + 10;
iv.setX(x);
iv.setY(y);
}
if (x>f.getWidth()) {
x = x - 10;
iv.setX(x);
iv.setY(y);
}
else {
iv.setX(x);
iv.setY(y);
}
// Write your code to perform an action on contineus touch move
break;
case MotionEvent.ACTION_UP:
// Write your code to perform an action on touch up
break;
}
// TODO Auto-generated method stub
return true;
}

我的目标是,如果用户将框拖动到左侧 View 之外,则给拇指一个 x+10 以保持在 View 中,如果用户将框拖到 View 之外的右侧,则给拇指一个 x-10保持在视野范围内。但是如果我左右拖动到 FrameLayout 之外,拇指就会消失。

这是我的 XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="20dp"
android:id="@+id/ll"
android:background="#000000" >

<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/palette2"
android:id="@+id/fl" >

<ImageView
android:id="@+id/iv"
android:layout_width="10dp"
android:layout_height="10dp"
android:src="@drawable/esquare" />

</FrameLayout>
</LinearLayout>

如何修改代码才能实现结果?

最佳答案

您是否尝试过 https://stackoverflow.com/a/9112808/663370 中的代码?

您让图像超出边界,然后尝试对此进行纠正。首先就不要让它超出边界。在处理事件之前检查坐标是否有效,否则就中断。

f = (FrameLayout) findViewById(R.id.fl);
f.setOnTouchListener(flt);

f.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
width = f.getMeasuredWidth();
height = f.getMeasuredHeight();

@Override
public boolean onTouch(View v, MotionEvent event) {

float x = event.getX();
float y = event.getY();

switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// Write your code to perform an action on down
break;
case MotionEvent.ACTION_MOVE:
if ( (x <= 0 || x >= width) || (y <= 0 || y >= height) )
break;
iv.setX(x);
iv.setY(y);
break;
case MotionEvent.ACTION_UP:
// Write your code to perform an action on touch up
break;
}
// TODO Auto-generated method stub
return true;
}

关于java - 如何将X和Y保持在布局 View 内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21520075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com