下面是一个拖动view时 view不会超出屏幕,即view不会被盖住的小例子
public class DragButtonActivity extends Activity implements OnTouchListener {
/** Called when the activity is first created. */
int[] temp = new int[] { 0, 0 };
int display_x, display_y = 800;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button btn = (Button) findViewById(R.id.btn);
display_x = getWindowManager().getDefaultDisplay().getWidth();
View v = getWindow().findViewById(Window.ID_ANDROID_CONTENT);
v.measure(0, 0);
display_y = v.getMeasuredHeight();
showLog("display_y = " + display_y);
btn.setOnTouchListener(this);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
int eventaction = event.getAction();
// Log.i("touch", "onTouchEvent:" + eventaction);
int x = (int) event.getRawX();
int y = (int) event.getRawY();
int w = v.getWidth(), h = v.getHeight();
switch (eventaction) {
case MotionEvent.ACTION_DOWN: // touch down so check if the
temp[0] = (int) event.getX();
temp[1] = (int) (y - v.getTop());
showLog("y = " + y + "; v.getTop() " + v.getTop()
+ "; (y - v.getTop()) = " + (y - v.getTop())
+ "; event.getY() = " + event.getY());
display_y = getWindow().findViewById(Window.ID_ANDROID_CONTENT)
.getHeight();
showLog("display_y = " + display_y);
break;
case MotionEvent.ACTION_MOVE: // touch drag with the ball
int l = (x - temp[0] <= 0) ? 0
: ((x - temp[0] + w > display_x) ? (display_x - w)
: (x - temp[0]));
int r = (l + w);
int t = (y - temp[1] <= 0) ? 0
: ((y - temp[1] + h > display_y) ? (display_y - h)
: (y - temp[1]));
int b = t + h;
v.layout(l, t, r, b);
v.postInvalidate();
break;
case MotionEvent.ACTION_UP:
break;
}
return false;
}
void showLog(String content) {
Log.i("touch", "------------------------:" + content);
}
}
分享到:
相关推荐
在Android开发中,创建一个可拖动并能自动吸附到屏幕边缘的悬浮View是一项常见的需求,这通常用于实现类似桌面小部件或者浮动工具栏的功能。本文将深入探讨如何实现这样的功能,主要涉及Android Java编程语言以及...
在onDraw()方法中,根据设计需求,通过Path的移动、添加点、连接线段等操作来构建优惠券的边缘轮廓,然后用Canvas进行绘制。 代码实现过程中,需要注意性能优化,避免在onDraw()中执行耗时操作,确保视图的流畅刷新...
`Lerp`函数会线性插值从当前相机位置逐渐移动到目标位置(当前位置加上`dir`乘以`moveSpeed`),并以`Time.deltaTime`作为插值系数,确保移动速度不受帧率影响。 为了实现视觉上的效果,如鼠标指针变化、滚轮缩放和...
4. **边界检测**:在拖拽时,检查鼠标是否靠近视口边缘,以防止不必要的平移。 通过这些技术,我们可以构建出一个具有高效交互性的图像查看器,让用户能够方便地对图像进行放大、缩小和拖拽操作。在实际项目中,你...
在实际应用中,为了确保视图的移动和缩放行为平滑且无误,开发者需要处理一些边缘情况,比如防止视图移出屏幕或者缩放至不合理的大小。这可能涉及到对移动和缩放范围的限制,以及在手势结束时对视图位置和大小的校正...
动态边缘检测是指在连续的视频流或图像序列中检测到物体边缘的过程,这在移动设备上有着广泛的应用,如增强现实、自动驾驶、智能监控等场景。OpenCV库提供了一系列高效的算法来实现这一功能,例如Canny边缘检测、...
在安卓应用开发中,创建一个可以拖拽并自动吸附到屏幕边缘的自定义View是一项有趣且实用的技术。这种功能常见于各种系统设置、桌面小部件或者应用抽屉中,为用户提供便捷的操作体验。下面我们将详细探讨如何实现这个...
但对于动态边缘光,可能需要考虑到物体的运动或摄像机的移动,这意味着视方向会随时间变化,因此边缘光效果也会动态更新。 在遮罩处理方面,我们可能希望某些部分不显示边缘光,例如有遮挡的部分。这可以通过额外的...
在Qt框架中,QGraphicsItem是一个非常重要的组件,它用于在QGraphicsView或QGraphicsScene中绘制和操作图形对象。本篇文章将详细讲解如何实现QGraphicsItem的边缘控制拉伸功能,使用户可以通过拖动其边框来改变图形...
例如,启用`setRenderHint(QPainter::Antialiasing)`以获得平滑的边缘,使用`setCacheMode(QGraphicsView::CacheBackground)`缓存背景以减少重绘。 通过这些例子和概念,我们可以看到QT的Graphics View框架的强大和...
4. **计算拉伸比例**: 在接收到ACTION_MOVE事件时,我们需要计算出手指移动的距离,根据这个距离动态调整Matrix的缩放因子。如果用户向屏幕边缘滑动,那么图片的对应边缘就应该按照这个比例进行拉伸。 5. **重绘...
要实现无限循环,我们需要做的是当用户滚动到Content的边界时,将内容移动回初始位置,使得用户感觉内容一直在循环。这通常需要自定义脚本来处理,通过监听Scroll View的滚动事件并适当地更新Content的位置。 对于...
在Android开发中,实现View移动的需求是常见的场景,比如在创建自定义视图或构建可交互界面时。这里总结了六种方法来实现View的移动,适用于不同的应用场景。 1. **layout()**: `layout()` 方法允许我们直接设置...
总的来说,Android结合OpenCV进行边缘检测不仅能够提升移动设备的图像处理能力,也为开发者提供了丰富的计算机视觉工具,从而实现更多创新的App功能。在开发过程中,注意保持NDK路径正确,理解并熟练运用OpenCV提供...
为了实现侧面停靠功能,`FloatingView` 需要检测视图是否接近屏幕边缘。这可以通过计算视图与屏幕边缘的距离来实现。一旦检测到接近边缘,可以使用动画将视图平滑地停靠到指定位置。 **6. 视图控制器...
总的来说,创建一个跟随手指滑动并在手指抬起后吸附到屏幕边缘的自定义View,需要理解Android的触摸事件机制,以及如何利用这些事件来控制视图的移动。通过以上步骤,我们可以实现一个有趣且实用的用户交互元素,为...
当View被拖动到屏幕边缘时,可能需要进行反弹或限制移动范围。这可以通过比较View的当前位置和边界值来实现。例如,可以定义一个方法检查View是否越界,并根据结果决定是否更新位置。 此外,如果标题中的...
例如,你可以创建一个Matrix对象,然后调用`postTranslate()`进行平移,`postRotate()`进行旋转,来让视图沿着圆形边缘移动。 4. **视图动画**: 除了在`onDraw()`中直接改变视图位置,还可以使用Android的动画系统...
3、鼠标放在矩形边缘可以拉长或拉短矩形的宽高 4、按住ctrl,滑动滚轮可以放大缩小矩形 5、鼠标右键矩形可以删除、保存 用法链接:...
接着,"横向滚动"(Horizontal Scrolling)是针对内容宽度超过屏幕宽度的情况,允许用户水平滑动查看更多的内容。在小程序中,可以使用`<scroll-view>`组件来实现这一效果。通过设置`scroll-x`属性为`true`,可以让...