Android可移动控件

可移动控件:

效果图:

获取屏幕的宽高:

1         DisplayMetrics dm = getResources().getDisplayMetrics();
2         screenWidth = dm.widthPixels;
3         screenHeight = dm.heightPixels - 50;
4         ImageView imageView = (ImageView)findViewById(R.id.spirit_img);
5         imageView.setOnTouchListener(this);

onTouch设定:

 1     @Override
 2     public boolean onTouch(View v, MotionEvent event) {
 3         int action = event.getAction();
 4         switch (action){
 5             case MotionEvent.ACTION_DOWN:
 6                 lastX = (int) event.getRawX();
 7                 lastY = (int) event.getRawY();
 8                 break;
 9             case MotionEvent.ACTION_MOVE:
10                 int dx =(int)event.getRawX() - lastX;
11                 int dy =(int)event.getRawY() - lastY;
12                 int left = v.getLeft() + dx;
13                 int top = v.getTop() + dy;
14                 int right = v.getRight() + dx;
15                 int bottom = v.getBottom() + dy;
16                 if(left < 0){
17                     left = 0;
18                     right = left + v.getWidth();
19                 }
20                 if(right > screenWidth){
21                     right = screenWidth;
22                     left = right - v.getWidth();
23                 }
24                 if(top < 0){
25                     top = 0;
26                     bottom = top + v.getHeight();
27                 }
28                 if(bottom > screenHeight){
29                     bottom = screenHeight;
30                     top = bottom - v.getHeight();
31                 }
32                 v.layout(left, top, right, bottom);
33                 lastX = (int) event.getRawX();
34                 lastY = (int) event.getRawY();
35                 break;
36         }
37         return false;
38     }

layout的办法有一个问题,viewgroup里面的其他东西刷新,imageview就会归位。

时间: 2024-10-24 22:55:06

Android可移动控件的相关文章

Android自定义控件系列 十:利用添加自定义布局来搞定触摸事件的分发,解决组合界面中特定控件响应特定方向的事件

这个例子是比较有用的,基本上可以说,写完这一次,以后很多情况下,直接拿过来addView一下,然后再addInterceptorView一下,就可以轻轻松松的达到组合界面中特定控件来响应特定方向的触摸事件了. 请尊重原创劳动成果,转载请注明出处:http://blog.csdn.net/cyp331203/article/details/45198549,非允许请勿用于商业或盈利用途,违者必究. 在写Android应用的过程之中,经常会遇到这样的情况:界面包含了多个控件,我们希望触摸在界面上的不

Android开发的那些坑和小技巧

1.android:clipToPadding 意思是控件的绘制区域是否在padding里面.默认为true.如果你设置了此属性值为false,就能实现一个在布局上事半功陪的效果.先看一个效果图. 上图中的ListView顶部默认有一个间距,向上滑动后,间距消失,如下图所示. 如果使用margin或padding,都不能实现这个效果.加一个headerView又显得大材小用,而且过于麻烦.此处的clipToPadding配合paddingTop效果就刚刚好. 2.match_parent和wra

代码讲解Android Scroller、VelocityTracker

在编写自定义滑动控件时常常会用到Android触摸机制和Scroller及VelocityTracker.Android Touch系统简介(二):实例详解onInterceptTouchEvent与onTouchEvent的调用过程对Android触摸机制需要用到的函数进行了详细的解释,本文主要介绍两个重要的类:Scroller及VelocityTracker.利用上述知识,最后给出了一个自定义滑动控件的demo,该demo类似于ImageGallery.ImageGallery一般是用Gri

Android自定义View滑动事件处理总结

滑动处理需要用到的各种工具类: android.view.VelocityTracker android.view.OverScroller android.view.ViewConfiguration VelocityTracker类  主要用跟踪触摸屏事件(flinging事件和其他gestures手势事件)的速率. 用addMovement(MotionEvent)函数将Motion event加入到VelocityTracker类实例中.你可以使用getXVelocity() 或getX

Android自己定义组件系列【5】——高级实践(1)

在接下来的几篇文章将任老师的博文<您可以下拉PinnedHeaderExpandableListView实现>骤来具体实现.来学习一下大神的代码并记录一下. 原文出处:http://blog.csdn.net/singwhatiwanna/article/details/25546871 先看一下终于效果: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luZ3doYXRpd2FubmE=/font/5a6L5L2T/fontsize/400/f

代码解说Android Scroller、VelocityTracker

在编写自己定义滑动控件时经常会用到Android触摸机制和Scroller及VelocityTracker.Android Touch系统简单介绍(二):实例具体解释onInterceptTouchEvent与onTouchEvent的调用过程对Android触摸机制须要用到的函数进行了具体的解释.本文主要介绍两个重要的类:Scroller及VelocityTracker.利用上述知识,最后给出了一个自己定义滑动控件的demo,该demo类似于ImageGallery. ImageGallery

Android做下拉刷新的时候,在做些什么

1. 简介 好长时间没有写博客了,一来是工作忙,抽不出空,二来是迷上了王者荣耀.现在正好赶上项目空闲期,写一篇关于下拉刷新的文章,个人觉得上来加载更多功能使用场景非常少,而且没有必要做的那么麻烦,文章最后会提一下加载更多的实现. 最近项目中遇见了下拉刷新的需求,正好研究了一下,分享一下自己的心得. 主要参考文章或工程: 郭霖大神-Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能 自个儿写Android的下拉刷新/上拉加载控件 XListView 这三篇文章各自提供了实现下拉刷新的思

android 类似360悬浮窗口实现源码

当我们在手机上安装360安全卫士时,手机屏幕上时刻都会出现一个小浮动窗口,点击该浮动窗口可跳转到安全卫士的操作界面,而且该浮动窗口不受其他activity的覆盖影响仍然可见(多米音乐也有相关的和主界面交互的悬浮小窗口).它能悬浮在手机桌面,且不受Activity界面的影响,说明该悬浮窗口是不隶属于Activity界面的,也就是说,他是隶属于启动它的应用程序所在进程.如360App所在的应用进程,当杀掉它所在的应用进程时,它才会消失.悬浮窗口的实现涉及到WindowManager(基于4.0源码分

Android 使用动画效果后的控件位置处理 类似系统通知栏下拉动画

Android的动画的使用,请参考.Android的动画,在设计方面,我有点不太理解,觉得这样搞很怪,因为在控件动画后,即使设置了停留在动画结束时的位置,我们也确实看到了控件停在那个位置,但其实该控件的真实位置还是在原来动画前的那里.举个例子,如果有个Button,你给它设置了动画,让它移动到其他位置,当移动完成后,你会发现,点击Button没有任何效果,而在Button原来的位置,就是动画前的位置点击,明明没有任何控件,却看到了点击Button的效果.不知道Google为什么要这样设计.解决思