首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

小 Demo 大知识 - 控制 Button 移动来学 Android 坐标

view获取自身坐标 如上图所以,绿色区域的父视图是黄色区域,所以left是55,top是55。 黄色区域的父视图是蓝色区域,所以left是60,top是115。 2.view获取自身宽高 没错。...当你高兴的这么写,你会发现你移动的Button总是在鼠标点击的下方。你会发现。X轴的的确已经正确了。但是Y轴还是错误。如下图所示: Paste_Image.png 这时候你一定会问,WHY???...其中getX()和getY()是在你点击下去的时候就获取的。也就是在motionEvent.getAction() == MotionEvent.ACTION_DOWN的时候去获取这二个即可。...因为在motionEvent.getAction() == MotionEvent.ACTION_MOVE的时候去获取getX()和getY()可能因为你拖动的速度原因造成不同,比如你拖动很快,鼠标先过去了...这时候的getX()及getY()都不同。 既然点击按钮可以拖动Button,那肯定对Button设置了OnTouch监听。

13810
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Java AWT 图形界面编程】使用鼠标滚轮缩放 Canvas 画布中绘制的背景图像 ( 绘制超大图像 + 鼠标拖动 + 鼠标滚轮缩放 + 以当前鼠标指针位置为缩放中心 示例 )

    , 指向图片坐标比例不变 , 图片尺寸发生了改变 , 重新计算当前图片的放置位置 , 并设置图片位置 ; 这样图片缩放时 , 始终可以保证鼠标指向的部位保持位置不变 ; 1、保存当前鼠标指针指向的位置..., 再根据鼠标指针指向的位置和比例 , 结合图片缩放的尺寸 , 重新计算画布偏移的位置 , 以达到鼠标指向的图片元素位置基本保持不变的目的 ; /** * 计算新的比例 *...; // 缩放的图像宽度 double imageHeight = image.getHeight(null) * scale; // 缩放的图像高度 // 计算整张画布宽度...image.getHeight(null) * scale; // 缩放的图像高度 // 计算整张画布宽度 double canvasX = imageWidth...int imageHeight = (int) (image.getHeight(null) * scale); // 缩放的图像高度 g2.drawImage(image

    2.8K10

    Android自定义控件ListView下拉刷新的代码

    自定义的带有头部的ListView首先要将头部视图隐藏掉,添加头视图的代码是listview.addHeaderView()。...注意:这里并不能用headerView对象的setVisibility()来实现隐藏的效果,当你调用这个添加头部视图的方法时,头部位置不管有没有视图都会占据一个位置。...();// 得到正在不断改变的当前Y坐标 int top = currentY - downY - height;// 这个是下拉时头部视图高度显示,要慢慢变化 headerView.setPadding...(0, top, 0, 0); if (currentY - downY height) {// 如果下拉的高度超过了头视图高度,则改变状态 currentState = STATE_RELEASE...isRefresh) { // 如果当前的下拉距离小于高度时,再把头部视图隐藏 headerView.setPadding(0, -height, 0, 0); // 一定要记得把状态改回去,不然会没法再次向下拉

    1.4K20

    【Android】手把手教你上滑解锁的效果

    类中有computeScroll方法,它能实现流畅滚动的原因是,它将初始位置和目标滑动位置之间的距离分成N份依次调用scrollTo方法,通过postInvalidate在每次调用scrollTo方法刷新视图...break; case MotionEvent.ACTION_MOVE: // 获取当前滑动的y轴坐标 float curY = event.getY...问题与改进 问题出现 基于上述的扩展,在RecyclerView的item里的控件添加点击事件,发现推荐页无法按预期显示隐藏:无论滑动多短的距离甚至是向上滑动,只要是在屏幕下方滑动,推荐页总是会自己显示出来...通过打印了Log,发现原因出在onTouchEvent的ACTION_DOWN里面,即:ACTION_DOWN没有触发,但是ACTION_UP触发了,导致上述的downY[0]为0,而curY很大,因此得到了下滑距离很大的假象...break; } return false; } }); 参考 Android Scroller简单用法 Android学习Scroller(四)——实现拉动回弹的布局

    2.6K20

    SmartRefreshLayout dispatchTouchEvent 解读

    示例场景:多手指情况下,一手指不变,另一手指上推二楼至不可见松手,二楼突然变换至下拉状态。 问题原因 event.getY() 返回的可能是任意的一个手指的位置。...H 控件高度 x 物理偏移spinner * 拖动比率 y y = M(1-100^(-x/H)) 很显然,随着spinner 增大,100^(-x/H) 这个幂次函数无限接近于0。...().setTranslationY() 根据上述代码,可以发现进行视图移送的是moveSpinner方法,moveSpinnerInifitely 仅是 按照 物理偏移+当前状态 区分case,计算真正拖动...H 控件高度 x 物理偏移spinner * 拖动比率 y y = M(1-100^(-x/H)) 很显然,随着spinner 增大,100^(-x/H) 这个幂次函数无限接近于0。...().setTranslationY() 根据上述代码,可以发现进行视图移送的是moveSpinner方法,moveSpinnerInifitely 仅是 按照 物理偏移+当前状态 区分case,计算真正拖动

    1.7K10

    【Android 应用开发】多点触控 ( 多点触控事件 | PointerId | PointerIndex | 坐标获取 | 触摸点个数 )

    Pointer 触摸点 : ① PointerId : 触摸点标识 , 一旦赋值不可更改 ; 手指按下 , 该触摸点产生 自带触摸点 ID 属性 , 以及分配一个触摸点索引 , 当手指抬起 , 该触摸点...PointerId 与 PointerIndex 运行机制 : PointerId 触摸点 ID 标识 , 只要按下 , 不抬起 , 不变 , 如果中间手指抬起 , 那么出现中间的 ID 空置的情况...PointerId 与 PointerIndex 互相转化 ---- PointerId 与 PointerIndex 关联 及 转化关系 : ① 两者特点 : PointerId 是固定不变的 , PointerIndex...PointerId : 唯一性的表示一个触摸点 , 该如果触摸上 , 任意移动 , 只要不抬起 , 就不变 ; PointerIndex : 触摸点的索引 ,...开始计数的连续的数值 , 同样是第 0 个索引 , 代表的可能是不同触摸点 ; 运行机制 : PointerId : 只要按下 , 不抬起 , 不变

    1.3K20

    Android实现仿魅族日历首页功能

    效果分析 1 该首页由两部分组成:GridView展示的日历视图,下方的内容视图 2 当选中日历的某一天,向上滑动,内容视图会不断的向上移动,直到只含有选中日期的那一行显示为止 3 伴随着内容视图向上移动...,日历视图也会跟随向上移动 4 还有一个效果该图没能体现:当为向上滑动,松手视图会自动向上隐藏;当为向上滑动时,松手视图会自动向下展开 实现逻辑 该view继承LinearLayout,日历视图和内容视图上下放置...1 宽高计算 // 内容视图的实际高度为该控件高度减去gridview一行的高度 // 这个不难得出结论,因为向上移动时,内容视图可以移动直到只含有选中日期的那一行显示为止 int heightSpec...,会回调该方法,可在这个方法获取GridView的高度 // 而内容视图可滑动的距离就是:GridView的高度减去其一行的高度 @Override protected void onSizeChanged...if (event.getY() - downY 0) { animateShow(); } else { // 假如松手的坐标比ACTION_DOWN的坐标要小,证明是向上滑动,通过动画隐藏日历视图

    80810

    Android自定义组合控件---教你如何自定义下拉刷新和左滑删除

    并没有太大区别,今天分享给大家,其实并不难,但是不知道为什么网上没有比较好的Demo,当你的项目真的很急的时候,又没有比较好的Demo,那么“那条友谊的小船儿真是说翻就翻啊”,好了,下面先来具体看一下实现的效果吧...public int getVisiableHeight() { return mContainer.getHeight(); } } 3.HeaderView定义结束,...private boolean mPullRefreshing = false; // 是否正在刷新 //上拉尾部视图 private LinearLayout mFooterView...} } setSelection(0); // scroll to top each time } /** * 重置头部视图高度...mHeaderViewHeight) { return; } int finalHeight = 0; // 默认 //如果正在刷新并且滑动高度大于头部高度

    1.4K10

    自定义 View 系列(一)-坐标系和视图坐标系

    视图坐标 Android 中除了上面所说的这种坐标系之外,还有一个视图坐标系,他描述了子视图在父视图中的位置关系。这两种坐标系并不矛盾也不复杂,他们的作用是相辅相成的。...只不过在视图坐标系中,原点不再是 Android 坐标系中的屏幕左上角,而是以父视图左上角为坐标原点。 ?...image 在触控事件中,通过 getX() 和 getY() 所获得的坐标就是视图坐标中的坐标。 在 Android 中,系统提供了非常多的方法来获取坐标值、相对距离等。...View自身的右边到其父布局左边的距离 **getBottom(): **获取到的是View自身的底边到其父布局顶边的距离 另外View获取自身宽高 **getHeight(): **获取View自身高度...**getWidth(): **获取View自身宽度 MotionEvent提供的方法: **getX(): **获取点击事件距离控件左边的距离,即视图坐标 **getY(): **获取点击事件距离控件东边的距离

    91140

    提高效率 |ArcGIS Pro 中所有快捷键一网打尽

    在 3D 中,照相机在保持照相机角度和高度不变的同时会向右移动一个屏幕宽度。 Esc 取消地图绘制。 F5 刷新活动视图。 Ctrl+F 打开定位窗格。...在 3D 中,照相机在保持照相机角度和高度不变的同时会向下移动一个屏幕宽度。Home向左移动一个屏幕大小。在 2D 中,向左平移一个屏幕宽度。...在 3D 中,照相机在保持照相机角度和高度不变的同时会向左移动一个屏幕宽度。End向右移动一个屏幕大小。在 2D 中,向右平移一个屏幕宽度。...在 3D 中,照相机在保持照相机角度和高度不变的同时会向右移动一个屏幕宽度。Esc取消地图绘制。 F5刷新活动视图。 Ctrl+F打开定位窗格。要了解有关定位窗格的详细信息,请参阅在地图上查找地点。...可以选择使用 A 和 D 键更改方向。同时使用箭头键和鼠标指针可产生行驶和环顾四周的运动感。 U 增加照相机的高度。 J 降低照相机的高度。 W 向上倾斜照相机以更改场景视图方向。

    1K20

    Android多点触控技术实战,自由地对图片进行缩放和移动

    */ private float currentBitmapWidth; /** * 记录当前图片的高度,图片被缩放时,这个会一起变动 */ private float currentBitmapHeight...else if (width - translateX > scaledWidth) { translateX = width - scaledWidth; } } // 如果当前图片高度小于屏幕高度...,以保证缩放中心点位置不变 matrix.postTranslate(translateX, translateY); totalTranslateX = translateX; totalTranslateY...translateY); totalTranslateY = translateY; totalRatio = initRatio = ratio; } else { // 当图片高度大于屏幕高度时...如果图片的宽度大于屏幕的宽度,或者图片的高度大于屏幕的高度,则将图片进行等比例压缩,让图片的的宽或高正好等同于屏幕的宽或高,保证在初始化状态下图片一定能完整地显示出来。

    2.2K50

    Android 动画:你真的会使用插器与估器吗?(含详细实例教学)

    、加速变化 等等 1.2 应用场景 实现非线性运动的动画效果 非线性运动:动画改变的速率不是一成不变的,如加速 & 减速运动都属于非线性运动 1.3 具体使用 a....只不过经过了余弦运算之后,最终的结果不再是匀速增加的了,而是经历了一个先加速减速的过程 // 所以最终,fraction = 运算 = 先加速减速 // 所以该差值器是先加速再减速的...),即决定的是变化趋势;而接下来的具体变化数值则交给 而估器 属性动画特有的属性 2.2 应用场景 协助插器 实现非线性运动的动画效果 非线性运动:动画改变的速率不是一成不变的...* (endPoint.getX() - startPoint.getX()); float y = startPoint.getY() + fraction * (endPoint.getY...() - startPoint.getY()); // 将计算的坐标封装到一个新的Point对象中并返回 Point point = new Point(x, y);

    1.7K10
    领券