`
hyongbai
  • 浏览: 14543 次
文章分类
社区版块
存档分类
最新评论

view 移动 不超过 边缘

 
阅读更多
下面是一个拖动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);
}
}
分享到:
评论

相关推荐

    悬浮View,可拖动,放手后自动吸附到屏幕边上。

    自定义的悬浮View,内容可以放任意布局,可以随手指拖动,悬浮后会自动吸附到手机左、右屏幕边上,可以控制是否自动吸附。

    (GraphicsView,QPainter,QGraphicsRectItem)QT用鼠标绘制矩形

    3、鼠标放在矩形边缘可以拉长或拉短矩形的宽高 4、按住ctrl,滑动滚轮可以放大缩小矩形 5、鼠标右键矩形可以删除、保存 用法链接:...

    Android实现控件的缩放移动功能

    话不多说先来张效果图   控件缩放移动.gif 上面的gif中,依次进行了拖动——&gt;触摸右上角放大,缩小——&gt;触摸上方与右测边缘——&gt;双指放大缩小。 2 使用步骤 2.1 布局。外层一个LinearLayout,里面一个自定义的控件...

    ScheduleView:可任意方向滑动+缩放的日程周表

    并不能装载其他子View, 因为缩放子View会导致重新measuration, 重新layout, 耗时较长, 会产生明显的卡顿. 本人也比较热爱自定义View, 有技术问题或者有更好的实现思路可以互相交流 如何联系到我 作者QQ : 907755845...

    RenRenSlideMenuDemo.zip

    如果手指移动的距离是正数,且当前menu是不可见的,则认为当前手势是想要显示menu。 * * @return 当前手势想显示menu返回true,否则返回false。 */ private boolean wantToShowMenu() { return xUp - ...

    实例解析如何在Android应用中实现弹幕动画效果

     从直观上,弹幕效果就是在一个ViewGroup上增加一些View,然后让这些View移动起来。所以,整体的实现思路大概是这样的: 1、定义一个RelativeLayout,在里面动态添加TextView。 2、这些TextView的字体大小、颜色、...

    DragVideo,一种在播放视频时,可以任意拖拽的方案

    public int clampViewPositionVertical(View child, int top, int dy) {//该方法中对child移动的边界进行控制,left , top 分别为即将移动到的位置 int newTop = mTop; Log.d(TAG, "&gt;&gt; clampViewPositionVertical...

    IOS 仿网易 banner scrollview 到头后 手势 事件提交到下级 拉开界面的效果

    以前 总是想 uiscrollview 滚动到 边缘了 把手势 传递下去 可是 IOS 不支持自己 产生touch 事件 后来 发现 IOS5 之后 scrollview 自带了 pan手势 (英语差 不会打gesture) 多试了几次 发现 直接移动 scrollview...

    pixi-viewport:高度可配置的viewport2D相机,旨在与pixi.js配合使用

    功能包括拖动,捏到缩放,鼠标滚轮缩放,减速拖动,跟随目标,动画,捕捉到点,捕捉到缩放,夹紧,在边缘弹跳以及在鼠标边缘移动。 查看现场示例,尝试所有这些功能。 所有功能都是可配置和可移动的,因此请根据您...

    piccomunica:移动APP TEA

    ## Mayte Cabrera的样机 ## APP技术堆栈code_langs:html,css和js env_dev:docker hybrid_build:cordova-phonegap control_versiones:git + github 框架:jsview 网络组件:聚合物 libs:zepto.js(jquery light...

    protel2004封装

    按ctrl后移动或拖动——移动对象时,不受电器格点限制 按alt后移动或拖动——移动对象时,保持垂直方向 按shift+alt后移动或拖动——移动对象时,保持水平方向 小结:PCB使用技巧 1、元器件标号自动产生或已有的元...

    CBIntrospector:可视化调试工具。 与桌面应用程序 View Introspector 兼容。 简单来说,它是一个 UIView 层次结构查看器库

    CBIntrospectorIntrospector 是一小组适用于iOS 6+和 iOS 模拟器的工具,可帮助调试使用 UIKit 构建的用户界面。...包括到主窗口边缘的距离使用快捷键在运行时移动和调整视图框的大小记录视图的属性,包括子

    FloatingPanel:适用于iOS的简洁易用的浮动面板UI组件

    通过FloatingPanelController.view帧的插入为每个状态指定一个锚点 更改背景Alpha 使用自定义面板状态 使用FloatingPanelBehavior协议自定义行为 修改浮动面板的交互 激活面板边缘的橡皮筋效果 管理平移手势动量的...

    alloy-smelter:Appcelerator Titanium MVC Framework Alloy 项目应用程序的辅助命令

    我经常移动、重命名和删除控制器。安装$ [sudo] npm install -g alloy-smelter 安装边缘版本。 [sudo] npm install -g git://github.com/k0sukey/alloy-smelter.git用法$ smelter &lt; command&gt; [options]帮助显示使用...

    三种样式的分栏控制器

    //分栏控制器边缘宽度 configuration.itemBackgroundColor = [UIColor blueColor]; //分栏按钮背景颜色 ······ LXDSegmentControl * segmentControl = [LXDSegmentControl segmentControlWithFrame: ...

    alipay-python-rsa:alipay mobile securitypay with python rsa,服务端移动支付

    Alipay-python-rsa 注:本项目使用是在Django上开发,其他框架可做参考 使用方法 settings.py配置 ```python ALIPAY_PARTNER = "2088...." ALIPAY_NOTIFY_URL = "" ALIPAY_SELLER_ID = ALIPAY...#参考view.py与check_no

    wx_sticker:微信小程序实现的图片拖拽,旋转,缩放(按住一个角)

    sticker 微信小程序实现图片贴纸效果 实现了贴纸叠加、删除、单指移动、右下角缩放旋转的功能 这个Demo并没有进行边缘判断 没有使用最新的movable-view 部分代码参考了大佬的方法

    BeoPlayer破解版

    视窗也打破一般传统的观念,执行时只在系统列有一图示,当滑鼠游标移动到桌面右侧边缘时,会出现一个黑色的小三角型,在小三角型点一下滑鼠会滑出 BeoPlayer 的控制面板,面板里包括主要的控制功能,像是播放、音量...

    icom_ic7600_sm.pdf

    建立你自己的数字中频滤波器后,你可以使用数字双通带调谐去移动和变窄中频通带直到干扰信号消失,你就能清晰的听到微弱的信号。 数字陷波器 有三种参数的数字陷波器可选择,抑制来自射频的干扰信号。 ...

    精通Windows.API-函数、接口、编程实例.pdf

    13.6.1 填充颜色与边缘勾勒 406 13.6.2 绘制矩形、椭圆、圆角矩形 406 13.6.3 椭圆弓形和椭圆扇形 411 13.6.4 多边形 411 13.6.5 RECT结构及对RECT的操作 412 13.7 位图操作 414 13.7.1 截取屏幕、保存...

Global site tag (gtag.js) - Google Analytics