作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我是一名优秀的程序员,十分优秀!