Android 浮动视图效果 第三种实现方式
2013-04-17 21:37
483 查看
一、有图有真相
二、如何实现浮动视图?
1. 使用WindowManager达到浮动视图效果。《Android 可移动悬浮窗口 WindowManager》
2. Android UI是树级结构,可以是同级视图一个在上面一个在下面,例如:《Android 滑动菜单(Sliding Menu)实现分析》 中的布局方式。也可以是上级视图。
3. 当前实现方式,画出一个视图达到浮动效果。之前虽然也学习过Canvas知道可以绘制出图形,但是这种浮动视图实现效果还是很震惊。
3.1. 使用View的属性把想要达到浮动效果的视图转换成Bitmap,具体可以看下《Android 把视图转换为图片,截取屏幕》。
3.2 创建ImageView并设置Bitmap。
3.3 重新对创建的ImageView 进行Measure,Layout操作,之后在dispatchDraw中把想要浮动的视图绘制出来。
当前例子是使用ListView演示效果,ListView本身是ViewGroup子类,只要是ViewGroup子类都可以通过这种方式实现浮动视图效果。
三、伪代码
1. 自定义ListView,先来看看触发显示浮动视图的地方。如果创建ListView这里就不再解释了。
2. 以上在DOWN事件是显示浮动视图,UP事件时隐藏浮动视图,现在来看看如何实现显示浮动视图的
3. 销毁浮动视图
四、源码下载
点击下载源码
转载请注明出处:http://blog.csdn.net/love_world_/article/details/8816176
二、如何实现浮动视图?
1. 使用WindowManager达到浮动视图效果。《Android 可移动悬浮窗口 WindowManager》
2. Android UI是树级结构,可以是同级视图一个在上面一个在下面,例如:《Android 滑动菜单(Sliding Menu)实现分析》 中的布局方式。也可以是上级视图。
3. 当前实现方式,画出一个视图达到浮动效果。之前虽然也学习过Canvas知道可以绘制出图形,但是这种浮动视图实现效果还是很震惊。
3.1. 使用View的属性把想要达到浮动效果的视图转换成Bitmap,具体可以看下《Android 把视图转换为图片,截取屏幕》。
3.2 创建ImageView并设置Bitmap。
3.3 重新对创建的ImageView 进行Measure,Layout操作,之后在dispatchDraw中把想要浮动的视图绘制出来。
当前例子是使用ListView演示效果,ListView本身是ViewGroup子类,只要是ViewGroup子类都可以通过这种方式实现浮动视图效果。
三、伪代码
1. 自定义ListView,先来看看触发显示浮动视图的地方。如果创建ListView这里就不再解释了。
@Override public boolean onTouchEvent(MotionEvent event) { final int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: // 按下的时候显示浮动视图 showFloatView(event); break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: // 抬起时清除浮动视图 destroyFloatView(); break; } return super.onTouchEvent(event); }
2. 以上在DOWN事件是显示浮动视图,UP事件时隐藏浮动视图,现在来看看如何实现显示浮动视图的
/** * 显示浮动视图 * * @param event */ private void showFloatView(MotionEvent event) { // 通过坐标获取指定选中的Item的位置 mSelectedPosition = pointToPosition((int)event.getX(), (int)event.getY()); if (mSelectedPosition == MISS) { return; } // 当前触摸的Item视图 View clickItem = getChildAt(mSelectedPosition); if (clickItem == null) { return; } // 转换为图片 clickItem.setDrawingCacheEnabled(true); mSelectedItemBitmap = Bitmap.createBitmap( clickItem.getDrawingCache() ); clickItem.setDrawingCacheEnabled(false); // 创建浮动视图 if (mFloatView == null) { mFloatView = new ImageView(getContext()); } mFloatView.setPadding(0, 0, 0, 0); mFloatView.setImageBitmap(mSelectedItemBitmap); mFloatView.setLayoutParams(new LayoutParams(clickItem.getWidth(), clickItem.getHeight())); measureFloatView(); // 隐藏当前Item clickItem.setVisibility(View.INVISIBLE); // 使以上设置生效 requestLayout(); }
3. 销毁浮动视图
/** * 注销浮动视图 */ private void destroyFloatView() { if (mFloatView != null) { mFloatView.setVisibility(View.GONE); // 销毁Bitmap,不注意回收容易出现内存溢出 if (mSelectedItemBitmap != null) { mSelectedItemBitmap.recycle(); mSelectedItemBitmap = null; } mFloatView = null; } // 显示之前隐藏的选中Item if (mSelectedPosition != MISS) { View selectedItem = getChildAt(mSelectedPosition); if (selectedItem != null) { selectedItem.setVisibility(View.VISIBLE); } } mSelectedPosition = MISS; invalidate(); }
四、源码下载
点击下载源码
转载请注明出处:http://blog.csdn.net/love_world_/article/details/8816176
相关文章推荐
- Android 便捷的方式实现Activity变暗的效果
- android中实现文本加线等效果的几种实现方式
- 【Android实现程序前后台切换效果】(一)android后台运行时弹出正在运行通知的三种方式对比
- Android中实现整个视图切换的左右滑动效果
- android界面无标题栏和全屏效果的实现方式
- Android 三种方式实现自定义圆形页面加载中效果的进度条
- Androidlistview 的侧滑删除仿的QQ效果的几种实现方式
- Android 三种方式实现自定义圆形页面加载中效果的进度条
- Android 实现控件浮动效果
- Android程序启动时的进入动画效果实现(方式之一)
- Android TextView实现跑马灯效果的两种方式
- 【Android实现程序前后台切换效果】(二)Android采用Service方式实现程序前后台切换效果
- Android应用界面无标题栏和全屏效果的两种实现方式
- Android实现图片浮动随意拖拽效果
- Android:实现一种浮动选择菜单的效果
- Android:实现一种浮动选择菜单的效果
- Android之图片浮动随意拖拽的效果实现
- [置顶] 【Android】Android开发之常用的loading等待效果实现,仿微博等待动画。两种实现方式详解
- android实现图片闪烁动画效果的两种实现方式(实用性高)
- Android 自定义View修炼-自定义HorizontalScrollView视图实现仿ViewPager效果