我们都知道,在Android中如果想要显示一张图片,可以借助ImageView控件来完成,但是如果将一张GIF图片设置到ImageView里,它只会显示这张图片的第一帧,不会产生任何的动画效果。...ImageView无法播放GIF图片说明它的功能还不够强大,那么今天我们就来编写一个PowerImageView控件,让它既能支持ImageView控件原生的所有功能,同时还可以播放GIF图片。...Bitmap mStartButton; /** * 记录动画开始的时间 */ private long mMovieStart; /** * GIF图片的宽度 */ private...如果得到的Movie对象等于null,说明这是一张普通的图片资源,就不再进行任何特殊处理,因为父类ImageView都帮我们处理好了。...,PowerImageView的用法和ImageView几乎完全一样,使用android:src属性来指定一张图片即可,这里指定的anim就是一张GIF图片。
我们在android开发过程中可能会遇到一种情况,一个组件需要保持固定的宽高比,但是组件本身大小却不定。比如我们需要让一个组件宽度与屏幕宽度一致,这样就无法确定宽度。那么如何让控件保持固定宽高比?...adjustViewBounds 为ImageView设置adjustViewBounds,如下: android:adjustViewBounds="true" 这样ImageView就会以图片的宽高比显示...在上面示例中我们将ImageView的宽高都设置为0。就此我测试了其他的可能性,产生的几个情况如下: 1、如果组件宽高都设置0dp,组件宽高按比例,且只受父view的约束。...如图 2、如果其中一个设置成了wrap_content或match_parent,比如说宽度,那么宽度就会是 图片的真实宽度 和 父view的限制宽度 的较小值,而高度会根据宽度和比例计算出来。...这时如果图片较小,就不会撑满父View。如图 3、如果宽高都设置成了wrap_content或match_parent,则比例失效。
设置了宽度就可以获取实在宽带 int width = getWidth(); if (width <= 0) { //如果ImageView没有设置宽度...,就获取父级容器的宽度 width = layoutParams.width; } if (width <= 0) { /...没有设置高度,就获取父级容器的高度 height = layoutParams.height; } if (height 父级容器的宽度 width = layoutParams.width; } if (width <= 0) { /...没有设置高度,就获取父级容器的高度 height = layoutParams.height; } if (height <= 0) {
普通图片 图片是最常用的drawable资源,格式包括:png(推荐)、jpg(可接受)、gif(不建议)。...fill_horizontal 在水平方向上拉伸图片以填满容器的整个宽度 clip_vertical 附加选项,裁剪基于垂直方向的gravity设置,设置top时会裁剪底部,设置bottom...当裁剪方向为horizontal时,会裁掉图片左右部分;当裁剪方向为vertical时,会裁掉图片上下部分 fill 拉伸整张图片以填满容器的整个高度和宽度。...当裁剪方向为vertical时,图片不会被裁剪,除非level设为了0,此时图片不可见 fill_horizontal 在水平方向上拉伸图片以填满容器的整个宽度。...android:duration属性设置该帧持续的时间,以毫秒数为单位。
ImageView的XML属性 android:src,设置ImageView要显示的图片; android:adjustViewBounds,是否保持宽高比,需要和maxWidth、maxHeight...一起使用,否则单独使用没有效果; android:maxWidth,设置View的最大宽度; android:maxHeight,设置View的最大高度; 如果想设置图片固定大小,又想保持图片宽高比,...需要这样设置: android:adjustViewBounds设置为true; android:maxWidth和android:maxHeight要设置; android:layout_width...,居中显示 android:scaleType=”fitEnd”,把图片按比例扩大(缩小)到View的宽度,显示在View的下部分位置 android:scaleType=”fitStart”,把图片按比例扩大...在实际需求中,我们可能会用到更高级的用法,如显示圆形头像,或者动态的gif,又或者图片的缩放与缩略图等等,这些就需要我们自己取实现ImageView了,后面都会讲到。
优酷环形菜单 布局文件,使用控件作为第一级菜单,相对布局,位于父控件的底部,水平居中,因为图片不是特别的标准,因此宽度和高度都钉死,宽度是高度的两倍 二次菜单和三级菜单都一样的布局...小房子的图标imageView/>控件,在父控件中居中 第二级搜索图标,位于父控件的底部,上下左右maigin10dp 第二级菜单图标,位于父控件的顶部,水平居中,marginTop 10dp 第二级叹号图标...,位于父控件的底部,右边,margin 10dp 第三级的图标比较多,但是原理和第二级一样,只不过通过margin来定位 第三级channel2的图标,位于channel1图标的上面,和channel1...6dp 第三级channel4的图标,位于父控件的上面,水平居中,marginTop 5dp 左侧半圆结束,右侧半圆和左侧一样的步骤 布局代码: android..." android:background="@drawable/level1" > ImageView android:layout_width
但然,如果以上项模板还无法满足你的要求,那只能自定义模板了(相当简单,就是定义一个layout布局)。...list_view_row.xml中我们如何像下面的这样格式呢: 左边是图片,右边是两个文本显示控件,并且是上面是图片代表的食物,下面是该食物的介绍, 1)显然我们需要明确的就是图片的大小------它的宽度不是填充父窗体的...2)猪肉和黄连这两行文本显示控件的大小-------它的宽度应该是填充父窗体的,(这个时候的填充父窗体是指在当前的水平方向的线性布局中剩下的空间),,它的宽度也可以是包裹内容的,因为我们清楚这里的汉字显示的个数很少...省略号显示在开头; ”end” ——省略号显示在结尾; ”middle”—-省略号显示在中间; ”marquee” ——以跑马灯的方式显示(动画横向移动) 4)上面的汉字显示文本框(黄连),它的内容应该是动态设置的...="@id/ImageView01" 表示TextView控件在以id=ImageView01的控件的右边 6)android:layout_alignParentRight //贴紧父元素的右边缘
图片xib 这里图片里面又分为普通图片、gif图片、长图。需要根据图片的不同判断gif标识ImageView和点击查看大图Button是否隐藏。...,以显示顶部为准 self.imageView.contentMode = UIViewContentModeTop; self.imageView.clipsToBounds = YES...并且同样需要注意cell重用的问题,设置显示gif标识和查看大图button显示就需要在相对的方法中设置隐藏,防止cell重用时发生错乱。...未处理长图显示 图片被压缩填充在ImageView中,此时在判断如果是长图的方法中修改imageView的contentMode即可 // 设置imageView的内容以顶端对齐显示,多余的会被裁剪掉...子控制器内的代码变得非常简单,只需要重写覆盖父类的get方法即可,并且可以在子类中对子类进行一些个性化的设置。
:宽度和高度匹配上一级,最外层的上一级是屏幕 wrap_content:匹配下一级,下一级多大,他多大 fill_parent:已废弃 固定数值:单位通常使用dp dp可以根据像素密度进行匹配 android...android:text="@string/text_value" /> android:layout_centerInParent=“true”:设置为父级的中心 setContentView...:layout_gravity="center" //设置组件在父组件的位置 weight: 用于按照权重的比值设置宽和高的比例,只能应用于线性布局 给那个属性设置权重,就给这个属性设置0dp android...-- 定义一个用于显示头像的ImageView --> ImageView android:id="@+id/imgtou" android:layout_width...,监听器会一直监听某个事件的响应 当监听到事件变化就会调用回调函数 以点击事件为例学习监听器 1.给需要监听的控件设置一个id 2.java代码中设置监听 3.根据id找到监听的id(注意,这里寻找的id
垂直居中 android:layout_centerInparent 相对于父元素完全居中 android:layout_alignParentBottom 贴紧父元素的下边缘 android...你可以设置该text 在view的靠左,靠右等位置.以button为例,android:gravity="right"则button上面的文字靠右 android:layout_gravity android...:layout_gravity是用来设置该view相对与起父view 的位置.比如一个button 在linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置.以button...android:scaleType: android:scaleType是控制图片如何resized/moved来匹对ImageView的size。...,居中显示 FIT_END / fitEnd 把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置 FIT_START / fitStart 把图片按比例扩大/缩小到View的宽度,显示在
先看一下效果: 不知道为什么,整成gif的横线就没有了,在模拟器上也看不到,真机上是没有问题的,纠结死小编了 image.png image.png 首先我们来看看GridView的一些常用的属性吧...1.android:numColumns=”auto_fit” //GridView的列数设置为自动 2.android:columnWidth=”90dp ” //每列的宽度,也就是Item的宽度...=”true” //设置为true就可以实现滚动条的自动隐藏和显示 10.android:fastScrollEnabled=”true” //GridView出现快速滚动的按钮(至少滚动4页才会显示...要想实现这种功能我们要设置imageview的 android:clickable=”true”,看一下布局文件: ImageView...listener.getPostion()); // view.getParent().requestDisallowInterceptTouchEvent(false);//通知父控件勿拦截本控件
在布局标签()中可以设置布局本身的各个属性,比如“android:orientation”表示布局的方向,以水平摆放为例,android:orientation=“horizontal”,这样控件就会从左到右进行排列...注意TableRow中的控件是不能指定宽度的。 因为在TableRow中无法指定控件的宽度,如果想调整控件的宽度,可以设置android:stretchColumns属性来解决这个问题。...android:stretchColumns允许将TableLayout中的某一列进行拉伸,以达到自动适应屏幕宽度的作用。...在适配器中,可以设置不同的列表项布局,以展示不同的列表效果。在Android系统中已经定义了常用的列表显示效果。...过滤器的匹配结果多于一个,则可以根据在标签中定义的优先级标签来对Intent过滤器进行排序,优先级最高的Intent过滤器将被选择。
这时以 ObjectAnimator、ValueAnimator 为代表的属性动画也就应运而生了。...---- 简单效果 ---- 工作原理 属性动画字如其名,是通过改变 View 的属性值来改变控件的形态,说白了就是通过反射技术来获取控件的一些属性如宽度、高度等的 get 和 set 方法,从而实现所谓的动画效果...这里就不在赘述了,大家可以自己试试看(我 GIF 图中,右下角的动画,就是旋转 + 透明度) ---- 使用 ValueAnimator 实现属性动画 ValueAnimator 是 ObjectAnimator...的父类,他两之间的区别是,ObjectAnimator 在ValueAnimator 的基础上,通过反射技术实现了动画功能,也就像我刚刚所举的例子,子要给了 ObjectAnimator 两个值(from...那么我们在执行完多小动画,也就是 animationDown 后,就无法在获得控件原始大小了。
:name="android.permission.INTERNET" /> 基本使用 我们通过一个demo来展示Glide的使用方法,首先创建一个Android工程,在布局中添加一个ImageView...,Activity,Fragment等 2.load:重载方法,可传入图片地址的Uri,本地资源id等 3.into:参数为一个ImageView或Taget对象 占位图设置 为了给用户更好的体验...); placeholder为设置图片加载前占位图,error为设置加载出错后占位图。...显示GIF Glide的强大之处在于除了加载图片之外,还可以加载GIF Glide.with(this).asGif().load(url).into(imageView); 如上代码即可展示GIF...图,如果图片不是GIF格式则会按error处理 设置缓存 Glide缓存的设计是三级缓存,两级内存缓存和一级硬盘缓存,默认情况下开启了内存缓存和硬盘缓存,如果需要将内存缓存禁掉,可以使用如下代码:
设置半径 6.尺寸限制 也可以为 ConstraintLayout 自身定义最小和最大大小: 属性 作用 android:minWidth 设置布局的最小宽度 android:minHeight 设置布局的最小高度...android:maxWidth 设置布局的最大宽度 android:maxHeight 设置布局的最大高度 当 ConstraintLayout 内部子 View 宽度/高度为 0dp,则同等于...使用这块需要注意: 设置宽度/高度百分比时,需要先将对应的宽/高设置为 0dp; 默认值应设置为百分比 app:layout_constraintWidth_default="percent" 或 app...:weightSum 行内可设置的最大占比权重 android:layout_weight 当前 View 占比权重 android:baselineAligned 父容器布局是否对齐子 View 基线.../TableRow> android:stretchColumns: 设置某列宽度为剩余行宽度 [f4fd7e072ffe48b2a987409000e441cb~tplv-k3u1fbpfcp-watermark.image
.into(targetImageView); 2.2.2 图片转换 使用最少的内存完成复杂的图片转换,转换图片以适合所显示的ImageView,来减少内存消耗 Picasso.with(context...) .load(url) //裁剪图片尺寸 .resize(50, 50) //设置图片圆角 .centerCrop() .into(imageView) 2.2.3 加载过重 & 错误处理...url) //加载过程中的图片显示 .placeholder(R.drawable.user_placeholder) //加载失败中的图片显示 //如果重试3次(下载源代码可以根据需要修改)还是无法成功加载图片...); //加载本地文件 Picasso.with(context).load(new File("/images/oprah_bees.gif")).into(imageView2); 2.2.6 自动添加磁盘和内存二级缓存功能...2.2.7 支持优先级处理 每次任务调度前会选择优先级高的任务,比如 App 页面中 Banner 的优先级高于 Icon 时就很适用。
通俗地讲(这里借鉴了网上的一种说法),LayoutParams类是用于child view(子视图)向parent view(父视图)传达自己的意愿的一个东西(孩子想变成什么样向其父亲说明)。...举个栗子,子视图和父视图分别可以简单理解成一个LinearLayout 和该LinearLayout里边的一个 TextView 的关系, TextView 就算LinearLayout的子视图 child...、宽度以及margin属性。..." > ImageView android:id="@+id/img" android:layout_width="wrap_content"...> 2.在MainActivity中动态设置ImageView的属性 public class MainActivity extends Activity { private ImageView
二、UI适配2.1、常见的适配方式2.1.1、xml布局控件适配1.避免写死View的宽高,尽量使用warp_content和match_parent;2.父布局为LinearLayout,选择使用android...:layout_weight属性,为布局中的每个子View设置权重;3.父布局为RelativeLayout,可以选择使用layout_centerInParent等属性,设置子View的相对位置;4....这里提一点AS对图片资源的匹配规则:举个例子,当当前的设备密度为xhdpi,此时代码中ImageView需要去引用drawable中的图片,那么根据匹配规则,系统首先会在drawable-xhdpi文件夹中去搜索...如果在高dpi中搜索不到需要的图片,那么就会去drawable-nodpi中搜索,有则显示,无则继续向低dpi,如drawable-hdpi,drawable-mdpi,drawable-ldpi等文件夹一级一级搜索...displayMetrics.scaledDensity复制代码设配的目的在于使用一套设计稿,能完好的展示在不同设备上,所以UI需要确定一个固定的尺寸,依据density=px / dp的公式,确定density的值,其中px指的是真实设备的值,这里我们以设计稿的宽度作为一个纬度进行测算
首先需要了解一下这个属性的意思 ,即 是否允许子View超出父View的返回,有两个值true 、false ,默认true 使用的时候给子View和根节点View控件都设置android:clipChildren...那么我们需要一种属性来让子View可以不受到父容器的限制 这就要用到了android:clipChildren属性 我们只需要给 根节点控件 和 不想被父容器限制的子View 设置这个属性: android...="bottom" android:background="#ddd" > ImageView android:layout_width="0dp..." android:src="@mipmap/ic_launcher" /> ImageView android:layout_width="...首先,我们正常设置ViewPager控件的宽度都是 android:layout_width="match_parent" 而我们设置距离左右控件的距离之后,就会使ViewPager可现实的宽度变窄,
领取专属 10元无门槛券
手把手带您无忧上云