clipChildren 和 clipToPadding

  1. clipChild 用于定义子控件是否在父控件边界内进行绘制。clipChild 默认为 true。也就是不允许进行扩展绘制。

  2. clipToPadding 用来定义 ViewGroup 是否允许在 padding 中绘制。默认情况下,cliptopadding 被设置为 ture,也就是 padding 部分是不允许绘制的。

  3. 两者都是 ViewGroup 才具有的属性

使用 clipChildren 实现选中 Tab 放大效果

平时在使用的荷包每周一活动时,底部 Tab 会有那种点哪个 Tab 哪个 Tab 就放大的效果,用 clipChildren 制作了一个简单的 Demo。

布局文件 activity_clip.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/normal_height"
android:clipChildren="false"
android:orientation="horizontal"> <ImageView
android:id="@+id/iv1"
android:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:scaleType="fitCenter"
android:src="@mipmap/ic_launcher" /> <ImageView
android:id="@+id/iv2"
android:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:scaleType="fitCenter"
android:src="@mipmap/ic_launcher" /> <ImageView
android:id="@+id/iv3"
android:layout_width="0dip"
android:layout_height="@dimen/special_height"
android:layout_gravity="bottom"
android:layout_weight="1.0"
android:scaleType="fitCenter"
android:src="@mipmap/ic_launcher" /> <ImageView
android:id="@+id/iv4"
android:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:scaleType="fitCenter"
android:src="@mipmap/ic_launcher" /> <ImageView
android:id="@+id/iv5"
android:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:scaleType="fitCenter"
android:src="@mipmap/ic_launcher" /> </LinearLayout>

代码实现ClipActivity.java:

public class ClipActivity extends Activity implements View.OnClickListener {

    private ImageView mIv1, mIv2, mIv3, mIv4, mIv5;
private List<ImageView> mLstIv;
private int mNormalHeight, mSpecailHeight; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_clip); mLstIv = new ArrayList<>();
mIv1 = (ImageView) findViewById(R.id.iv1);
mIv2 = (ImageView) findViewById(R.id.iv2);
mIv3 = (ImageView) findViewById(R.id.iv3);
mIv4 = (ImageView) findViewById(R.id.iv4);
mIv5 = (ImageView) findViewById(R.id.iv5);
mIv1.setOnClickListener(this);
mIv2.setOnClickListener(this);
mIv3.setOnClickListener(this);
mIv4.setOnClickListener(this);
mIv5.setOnClickListener(this);
mLstIv.add(mIv1);
mLstIv.add(mIv2);
mLstIv.add(mIv3);
mLstIv.add(mIv4);
mLstIv.add(mIv5);
mNormalHeight = getResources().getDimensionPixelSize(R.dimen.normal_height);
mSpecailHeight = getResources().getDimensionPixelSize(R.dimen.special_height);
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.iv1:
clipChange(0);
break;
case R.id.iv2:
clipChange(1);
break;
case R.id.iv3:
clipChange(2);
break;
case R.id.iv4:
clipChange(3);
break;
case R.id.iv5:
clipChange(4);
break;
}
} private void clipChange(int position) {
int size = mLstIv.size();
for (int i = 0; i < size; i++) {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 1.0f);
if (i == position) {
params.height = mSpecailHeight;
params.gravity = Gravity.BOTTOM;
} else {
params.height = mNormalHeight;
params.gravity = Gravity.NO_GRAVITY;
}
mLstIv.get(i).setLayoutParams(params);
}
}
}

dimens.xml:

<resources>
<dimen name="normal_height">48dp</dimen>
<dimen name="special_height">64dp</dimen>
</resources>

最终效果图(点哪哪放大,不会制作gif...):

clipChildren和clipToPadding的更多相关文章

  1. [转]android:clipToPadding和android:clipChildren

    转自:http://www.tuicool.com/articles/32YRJrq android:clipToPadding和android:clipChildren 时间 2014-10-14 ...

  2. android:clipToPadding和android:clipChildren

    假设我们要做一个效果,界面最顶部是一个ActionBar并且是半透明的,ActionBar下面是一个ListView,在初始状态 下, ListView是top是在ActionBar的bottom位置 ...

  3. android:clipToPadding 和 android:clipChildren 解决ListView设置padding后 padding不跟随改动

    clipToPadding就是说控件的绘制区域是否在padding里面的,true的情况下如果你设置了padding那么绘制的区域就往里 缩, clipChildren是指子控件是否超过padding ...

  4. 用android:clipChildren来实现红心变大特效

    最近在看别人技术博客(http://www.cnblogs.com/over140/p/3508335.html)的时候,发现一个属性:android:clipChildren属性. 翻文档找到下面介 ...

  5. android:clipChildren属性的作用

    该属性默认为true,这个属性需要添加到最顶层的ViewGroup,作用是控制子View是否可以超出它所在的父View设定的边界 比如ImageView设置高度100dp,而它所在的父View设置的高 ...

  6. Android开发实战(二十一):浅谈android:clipChildren属性

    实现功能: 1.APP主界面底部模块栏 2.ViewPager一屏多个界面显示 3......... 首先需要了解一下这个属性的意思 ,即 是否允许子View超出父View的返回,有两个值true . ...

  7. 【Android】神奇的android:clipChildren属性

    前言 前几天有在微博上推荐过一个博客,看他文章时发现了这个属性.有些属性不常用,但需要的时候非常有用,于是做了个例子,正好项目用到,与大家分享一下. 声明 欢迎转载,请注明出处! 博客园:http:/ ...

  8. Android_神奇的android:clipChildren属性

    正文 一.效果图 看到这个图时你可以先想想如果是你,你怎么实现这个效果.马上想到用RelativeLayout?NO,NO,NO,,, 二.实现代码 <?xml version="1. ...

  9. android:clipChildren属性,子布局超出父布局;

    是否允许子View超出父View的范围,Boolean型true .false ,默认true不允许: android:clipChildren="true":如下 android ...

随机推荐

  1. jQuery之ajax实现篇

    jQuery的ajax方法非常好用,这么好的东西,你想拥有一个属于自己的ajax么?接下来,我们来自己做一个简单的ajax吧. 实现功能 由于jq中的ajax方法是用了内置的deferred模块,是P ...

  2. H5坦克大战之【建造敌人的坦克】

      公司这几天在准备新版本的上线,今天才忙里偷闲来写这篇博客.接着上一篇的"H5坦克大战之[玩家控制坦克移动2]"(http://www.cnblogs.com/zhouhuan/ ...

  3. Partition2:对表分区

    在SQL Server中,普通表可以转化为分区表,而分区表不能转化为普通表,普通表转化成分区表的过程是不可逆的,将普通表转化为分区表的方法是: 在分区架构(Partition Scheme)上创建聚集 ...

  4. 转:聊聊mavenCenter和JCenter

    Gradle支持从maven中央仓库和JCenter上获取构件,那这两者有什么区别呢? maven中央仓库(http://repo1.maven.org/maven2/)是由Sonatype公司提供的 ...

  5. 计算机程序的思维逻辑 (54) - 剖析Collections - 设计模式

    上节我们提到,类Collections中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了第一类,本节我们介绍第二类. 第二类方法大概可以分为两组: 接受其他 ...

  6. [转]Patch文件结构详解

    N久不来 于是不知道扔在哪儿于是放这里先 如果你觉得碍事的话 帮我扔到合适的版块去.. 导读这是一篇说明文 它介绍了标准冒险岛更新文件(*.patch;*.exe)的格式文章的最后附了一段C#的参考代 ...

  7. jquery.each()

    $(selector).each(function(index,element)) index - 选择器的 index 位置 element - 当前的元素(也可使用 "this" ...

  8. [异常特工]android常见bug跟踪

    前言 对app的线上bug的收集(友盟.云捕等)有时会得到这样的异常堆栈信息:没有一行代码是有关自身程序代码的.这使得对bug的解决无从下手,根据经验,内存不足OOM,Dialog关闭,ListVie ...

  9. 在Linux上运行ASP.NET vNext

    最新的ASP.NET vNext完全开源且可以跨多个平台运行,在Windows环境下我尝试了下,几乎没花什么工夫就跑起了Sample,而在Linux环境下则要多花了不少时间,所以特别记录下整个过程,希 ...

  10. C#中实现并发的几种方法的性能测试

    C#中实现并发的几种方法的性能测试 0x00 起因 去年写的一个程序因为需要在局域网发送消息支持一些命令和简单数据的传输,所以写了一个C/S的通信模块.当时的做法很简单,服务端等待链接,有用户接入后开 ...