使用ImageView应该注意的地方

Android Drawable 那些不为人知的高效用法 
http://blog.csdn.net/lmj623565791/article/details/43752383 


带标签的ImageView扩展:SimpleTagImageView 
http://www.open-open.com/lib/view/open1426813954054.html 
http://www.open-open.com/lib/view/open1429361445830.html 

Android ImageView的强大扩展:FlexiImageView 
特性 
多种形状的支持(圆形,矩形/正方形,三角形) 
高斯模糊效果 
反射 
自定义边框支持 
可定制的阴影支持 
在同一个视图中展示多张图片: 
http://www.open-open.com/lib/view/open1426473437414.html 

Android ImageView 扩展:PhotoView 
http://www.open-open.com/lib/view/open1366181874046.html 
Android PowerImageView实现,可以播放动画的强大ImageView 
http://www.open-open.com/lib/view/open1391690691535.html 

ImageView的ScaleType属性 
ImageView的属性android:scaleType,即 ImageView.setScaleType(ImageView.ScaleType) 
属性如下: 
CENTER /center  按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截 取图片的居中部分显示 
CENTER_CROP / centerCrop  按比例扩大图片的size居中显示,使得图片长 (宽)等于或大于View的长(宽) 
CENTER_INSIDE / centerInside  将图片的内容完整居中显示,通过按比例缩小 或原来的size使得图片长/宽等于或小于View的长/宽 
FIT_CENTER / fitCenter  把图片按比例扩大/缩小到View的宽度,居中显示 
FIT_END / fitEnd   把 图片按比例扩大/缩小到View的宽度,显示在View的下部分位置 
FIT_START / fitStart  把 图片按比例扩大/缩小到View的宽度,显示在View的上部分位置 
FIT_XY / fitXY  把图片 不按比例 扩大/缩小到View的大小显示 
MATRIX / matrix 用矩阵来绘制 
ImageView.ScaleType设置图解 

android:adjustViewBounds 
是否保持宽高比。需要与maxWidth、MaxHeight一起使用,否则单独使用没有效果。 

android:cropToPadding 
是否截取指定区域用空白代替。单独设置无效果,需要与scrollY一起使用。 

android:src对应的方法为setImageResource(R.drawable.xxx),而不是setBackgroundResource(R.drawable.txxx) 

关于ImageView和level-list一起使用以显示不同的图片 
有时候,我们为了在一个ImageView中显示不同的图片,往往会使用: 
Java代码   收藏代码
  1. if (条件1){   
  2.         image.setBackground(R.id.xxx1);   
  3. }else if (条件2){   
  4.         image.setBackground(R.id.xxx2);   
  5. }   

其实可以用level-list实现相同的功能。 
首先,在res/drawable下建立一个xml文件,内容如下: 
Xml代码   收藏代码
  1. <level-list xmlns:android="http://schemas.android.com/apk/res/android">  
  2.     <item android:maxLevel="0" android:drawable="@drawable/battery_0" />  
  3.     <item android:maxLevel="1" android:drawable="@drawable/battery_1" />  
  4.     <item android:maxLevel="2" android:drawable="@drawable/battery_2" />  
  5.     <item android:maxLevel="3" android:drawable="@drawable/battery_3" />  
  6.     <item android:maxLevel="4" android:drawable="@drawable/battery_4" />  
  7. </level-list>  

然后在layout中把ImageView的src设置成已创建好的xml文件。 
程序中变换图片时,只需要使用: 
Java代码   收藏代码
  1. imageview.getDrawable().setImageLevel(1);  

Android会根据level的值自动选择对应的图片。手机显示剩余电量就是用这个方法来显示不同图片的。 



让帧动画在结束时消失 
在帧动画结束的时候,如何让他消失呢?android提供了击中巧妙的方法: 
一般使用帧动画的过程如下: 
Java代码   收藏代码
  1. ImageView iv = (ImageView)findViewById(R.id.iv);  
  2. iv.setBackGroundDrawable(R.id.frametest);  
  3. AnimationDrawable ad = (AnimationDrawable)iv.getBackGroundDrawabe();  
  4. ad.start();  

上面的代码在帧动画结束的时候会保持帧动画的最后一帧。如何让他在结束的时候消失呢? 
当然可以写Listener来监听帧动画的结束事件了。不过这种实现方式不准确。 
其实只需要在animation-list中最后增加一个item 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <animation-list xmlns:android="http://schemas.android.com/apk/res/android"  
  3.         android:oneshot="true">  
  4.         <item android:drawable="@drawable/d1" android:duration="100" />  
  5.         <item android:drawable="@drawable/d2" android:duration="100" />  
  6.         <item android:drawable="@drawable/d3" android:duration="100" />  
  7.         <item android:drawable="@drawable/d4" android:duration="100" />  
  8.         <item android:drawable="@drawable/d5" android:duration="100" />  
  9.         <item android:drawable="@drawable/d6" android:duration="100" />  
  10.         <item android:drawable="@android:id/empty" android:duration="100" />  
  11. </animation-list>  

@android:id/empty 将ImageView的BackGroundResource 的id 设置为空就ok了。 

Android ImageView图片透明区域不响应点击事件,不规则图片透明区域响应点击事件 
Android 多个ImageView图片层叠透明区域点击事件穿透 
ImageView中用Animation-list实现逐帧动画 

Android 实现简单截屏并保存为文件 

可点可拖动,功能类似seekbar,由camera源码的switch修改的类 

camera源码设置条,自己写了个类,具有其主要功能,同样有switcher改进 


正方形的ImageView 
Java代码   收藏代码
  1. import android.content.Context;  
  2. import android.graphics.Bitmap;  
  3. import android.util.AttributeSet;  
  4. import android.util.Log;  
  5. import android.widget.ImageView;  
  6. /** 
  7.  * 正方形的ImageView 
  8.  * @author dty 
  9.  * 
  10.  */  
  11. public class SquareCenterImageView extends ImageView {  
  12.     public SquareCenterImageView(Context context, AttributeSet attrs, int defStyle) {  
  13.         super(context, attrs, defStyle);  
  14.     }  
  15.    
  16.     public SquareCenterImageView(Context context, AttributeSet attrs) {  
  17.         super(context, attrs);  
  18.     }  
  19.    
  20.     public SquareCenterImageView(Context context) {  
  21.         super(context);  
  22.     }  
  23.       
  24.     @Override  
  25.     public void setImageBitmap(Bitmap bm) {  
  26.         Log.d("roamer""bm.getWidth():"+bm.getWidth());  
  27.         Log.d("roamer""bm.getHeight():"+bm.getHeight());  
  28.           
  29.         super.setImageBitmap(bm);  
  30.     }  
  31.       
  32.     private void clipCenterImage(){  
  33.           
  34.     }  
  35.    
  36.     @Override  
  37.     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
  38.         // For simple implementation, or internal size is always 0.  
  39.         // We depend on the container to specify the layout size of  
  40.         // our view. We can't really know what it is since we will be  
  41.         // adding and removing different arbitrary views and do not  
  42.         // want the layout to change as this happens.  
  43.         setMeasuredDimension(getDefaultSize(0, widthMeasureSpec), getDefaultSize(0, heightMeasureSpec));  
  44.    
  45.         // Children are just made to fill our space.  
  46.         int childWidthSize = getMeasuredWidth();  
  47.         int childHeightSize = getMeasuredHeight();  
  48.         //高度和宽度一样  
  49.         heightMeasureSpec = widthMeasureSpec = MeasureSpec.makeMeasureSpec(childWidthSize, MeasureSpec.EXACTLY);  
  50.         super.onMeasure(widthMeasureSpec, heightMeasureSpec);  
  51.     }  
  52. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值