view中显示部分区域
在android中有时候要求只显示view的部分区域,这个时候就需要对当前的view进行剪裁的操作。在android中剪裁当前的view的有两种方法:一种是直接截取view,第二种是通过Outline设置。涉及到的类方法如下:
- View.getGlobalVisibleRect(Rect rect)
- View.setClipBounds(Rect rect)
- View.setOutlineProvider()
- View.setClipToOutline(boolean clipToOutline)
getGlobalVisibleRect(Rect rect):获取当前view的可视区域,坐标系使用的Root View的也就是DecorView的坐标系,这点需要注意,不是View自身的坐标系。
setClipBounds(Rect rect),直接指定当前view的可视区域,当前的Rect使用的view的自身的坐标系。
setOutlineProvider(),设置当前View的Outline。
setClipToOutlines(),截取当前的可视区域到Outline,如果设置setClipBounds()方法,这个方法就失效了。
下面通过一个简单的例子来说明一下这几个方法的使用:
MainActivity.java
1 package com.app.motiongear.clipboundsmotion; 2 3 import android.graphics.Rect; 4 import android.support.v7.app.AppCompatActivity; 5 import android.os.Bundle; 6 import android.util.Log; 7 import android.view.View; 8 import android.widget.Button; 9 import android.widget.ImageView; 10 11 public class MainActivity extends AppCompatActivity implements View.OnClickListener { 12 13 Button mRectBtn, mBoundBtn; 14 ImageView mImageView; 15 Rect originRect = new Rect(); 16 17 @Override 18 protected void onCreate(Bundle savedInstanceState) { 19 super.onCreate(savedInstanceState); 20 setContentView(R.layout.activity_main); 21 22 mRectBtn = (Button) this.findViewById(R.id.btn1); 23 mBoundBtn = (Button) this.findViewById(R.id.btn2); 24 mImageView = (ImageView) this.findViewById(R.id.imageview); 25 mRectBtn.setOnClickListener(this); 26 mBoundBtn.setOnClickListener(this); 27 mImageView.setOutlineProvider(new CustomOutlineProvider()); 28 } 29 30 31 @Override 32 public void onClick(View v) { 33 if (v == mRectBtn) { 34 //getGlobalVisibleRect()相对与父布局的rect 35 mImageView.getGlobalVisibleRect(originRect); 36 int centerX = (originRect.right - originRect.left) / 2; 37 int centerY = (originRect.bottom - originRect.top) / 2; 38 //设置View的显示区域,坐标是自身 39 Rect tmp = new Rect(centerX - 150, centerY - 150, centerX + 150, centerY + 150); 40 mImageView.setClipBounds(tmp); 41 } 42 if (v == mBoundBtn) { 43 //通过Outline设置 44 if(!mImageView.getClipToOutline()){ 45 mImageView.setClipToOutline(true); 46 }else{ 47 mImageView.setClipToOutline(false); 48 } 49 50 } 51 } 52 }
CustomOutlineProvider.java
1 package com.app.motiongear.clipboundsmotion; 2 3 import android.graphics.Outline; 4 import android.graphics.Rect; 5 import android.view.View; 6 import android.view.ViewOutlineProvider; 7 8 /** 9 * Created by ubuntu on 15-11-13. 10 */ 11 public class CustomOutlineProvider extends ViewOutlineProvider { 12 13 @Override 14 public void getOutline(View view, Outline outline) { 15 Rect rect = new Rect(); 16 view.getGlobalVisibleRect(rect); 17 int leftMargin =100; 18 int topMargin = 100; 19 Rect selfRect = new Rect(leftMargin, topMargin, 20 rect.right - rect.left - leftMargin, rect.bottom - rect.top - topMargin); 21 outline.setRoundRect(selfRect, 30); 22 } 23 }
调用clipToBounds()方法:
调用clipToOutline()方法:
转载于:https://www.cnblogs.com/summerpxy/p/4962761.html
view中显示部分区域相关推荐
- 移动场景在其缩略图中显示场景中所显示的区域
需求描述 在场景中实现拖动,缩放,并在场景的缩略图中显示其对应在视口中显示的矩形区域. 程序效果图如下: 开发环境:Qt 5.13.1 编译环境:MinGW64 项目结构: 直接上程序: main.c ...
- Android 曝光采集,商品view曝光量的统计,判断RecyclerView中某子view是否可见 view是否显示在屏幕中 view展示次数统计...
近期pm提出需要统计首页商品的曝光亮,由于我们的首页是用的recylerview实现的,这里就来讲下如何使用监听recylerview的滚动事件来实现子view的曝光量统计,我们这里说的view都是列 ...
- 区域显示触发_Unity3D 在Hierarchy窗口中显示物体所属Layer
我们想要查看场景中物体的Layer时,需要在Hierarchy窗口中点击GameObject,然后才能在Inspector中显示Layer等相关属性, 当场景物体多的时候,这个操作还是比较麻烦的.那么 ...
- 在html中加入滚动条,html在div中显示滚动条
基本思路:滚动条要添加到内容部分的父标签上(div),内容部分不设置大小,父标签要明确设置大小,并且父标签要添加overflow样式,并设置成auto. 打开的效果如下: 这时可能有人会问,父div的 ...
- android listview headerview 分割线,【我的Android进阶之旅】如何去除ListView中Header View、Footer View中的分割线...
最近的项目中给ListView 加入了一个Header View之后,发现Header View的下方也有了分割线,很难看,UI要求将Header View的分割器去掉,好吧.现在就来说一说如何如何去 ...
- ASP.NET MVC5 + EF6 入门教程 (6) View中的Razor使用
ASP.NET MVC5 + EF6 入门教程 (6) View中的Razor使用 原文:ASP.NET MVC5 + EF6 入门教程 (6) View中的Razor使用 文章来源: Slark.N ...
- android 部分区域点击,Android编程实现ListView中item部分区域添加点击事件功能
本文实例讲述了Android编程实现ListView中item部分区域添加点击事件功能.分享给大家供大家参考,具体如下: 需求如题目:Android listview中item部分区域添加点击事件,在 ...
- android 在指定位置添加布局,Android 如何动态添加 View 并显示在指定位置。
引子 最近,在做产品的需求的时候,遇到 PM 要求在某个按钮上添加一个新手引导动画,引导用户去点击.作为 RD,我哗啦啦的就写好相关逻辑了.自测完成后,提测,PM Review 效果. 看完后,PM ...
- android动态添加控件在指定位置,Android 如何动态添加 View 并显示在指定位置。
引子 最近,在做产品的需求的时候,遇到 PM 要求在某个按钮上添加一个新手引导动画,引导用户去点击.作为 RD,我哗啦啦的就写好相关逻辑了.自测完成后,提测,PM Review 效果. 看完后,PM ...
最新文章
- 有关定时任务的表达式--cron 详细解
- 干货!高容错微服务架构设计思路
- 【Android 应用开发】Android 图表绘制 achartengine 示例解析
- 图解Dev C++ 创建Win32 项目模板
- HTML5常用标签及特殊字符表
- select * from ( union ) ')' 附近有语法错误。
- xxljob 配置具体定时任务_分布式任务调度: XXL-Job
- (2)vue.js介绍
- 测测自己最像哪幅名画?谷歌博物馆App新推自拍功能
- [javaSE] 集合工具类(Collections-sort)
- Java使用BufferedImage修改图片内容
- go编程语言为什么这么流行?
- 海康威视多摄像头视频实时采集——OpenCV显示
- 计算机保护插件无法安装,电脑无法安装ActiveX控件怎么办
- 服务器系统能装cad吗,服务器主机用CAD画图吗
- c语言 获取中文首字母,C语言获取汉字拼音首字母
- vue实现马赛克功能
- 最简示例 简介洗牌函数 之 __shfl_sync() cuda 之 shuffle
- vue如何跳转支付宝付款页面
- 《MySQL DBA修炼之道》——1.3 查询执行过程概述
热门文章
- 实践2.2 内核模块编译
- 边工作边刷题:70天一遍leetcode: day 11-1
- [Windows Server 2012] 安装IIS8.5及FTP
- cocos2d-x 3.X (二)创建动起来的精灵
- 从数据仓库系统对比看Hive发展前景
- ASP基础教程之ASP AdRotator 组件的使用
- Add-in and Automation Development In VB.NET 2003 (8)
- 安卓安装包不能覆盖原安装包_LOL手游全网最简单注册,安装教程,安卓 IOS皆可登录!攻略群有游戏安装包!...
- (80)ADC采集方法(基于LVDS采集方法)
- vue 复制 长按_Vue