Android实习札记(10)---ImageView的src属性 VS blackground

Android实习札记(10)---ImageView的src属性 VS blackground属性

                                                                             转载请注明出处:coder-pig



问题分析

相信大家对于ImageView图片组件并不陌生吧,见名知意,就是用来显示图片的咯!

而显示图片的话可以通过src属性,又或者blackground属性来进行设置!

这些大家都知道,但是有没有去纠结下什么情况下用这个,什么情况下用那个呢?

估计很多朋友的回答是"没有",哈哈,那么在本节中就来对这两个属性进行一个讲解吧!



由浅入深,先说下大部分人都知道的:


一.常识

background通常指的都是背景,而src指的是内容!!

②当使用src填入图片时,是按照图片大小直接填充,并不会进行拉伸

   而使用background填入图片,则是会根据ImageView给定的宽度来进行拉伸


多说无益,写个简单布局测试下咯:

main.xml:

[html]   view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:id="@+id/LinearLayout1"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.     android:orientation="vertical"  
  7.     tools:context="com.jay.example.imageviewdemo.MainActivity" >  
  8.   
  9.     <ImageView  
  10.         android:layout_width="wrap_content"  
  11.         android:layout_height="wrap_content"  
  12.         android:background="@drawable/pen" />  
  13.   
  14.     <ImageView  
  15.         android:layout_width="200dp"  
  16.         android:layout_height="wrap_content"  
  17.         android:background="@drawable/pen" />  
  18.   
  19.     <ImageView  
  20.         android:layout_width="wrap_content"  
  21.         android:layout_height="wrap_content"  
  22.         android:src="@drawable/pen" />  
  23.   
  24.     <ImageView  
  25.         android:layout_width="200dp"  
  26.         android:layout_height="wrap_content"  
  27.         android:src="@drawable/pen" />  
  28.   
  29. </LinearLayout>  

代码很简单,前面两个用blackground,后面两个用src,效果图如下:


分析:

宽高都是wrap_content那就一样,是原图大小,但是,当我们固定了宽或者高的话,

差别就显而易见了,blackground完全填充了整个ImageView,而src依旧是那么大,

而且他居中了哦,这就涉及到了ImageView的另一个属性scaleType了!

另外还有一点,这里我们说了只设置width或者height哦!加入我们同时设置了

width和height的话,blackground依旧填充,但是,src的大小可能发生改变哦!

比如,我们测试下下面这段代码:

[html]   view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <ImageView  
  2.         android:layout_width="100dp"  
  3.         android:layout_height="50dp"  
  4.         android:src="@drawable/pen" />  

效果图:



ps:至于ImageView的scaleType这里就不详细进行讲解了,详情可参阅笔者的另一篇博文:

android-UI组件实例大全之ImageView图像视图

另外,这个属性只对src属性生效哦!!切记!!





二.解决blackground拉伸导致图片变形的方法

在前面的效果图中的第二个Imageview中我们可以看到图片已经被拉伸变形了,

正方形变成了长方形,对于和我一样有轻微强迫症的人来说,显然是不可接受的,

有没有办法去设置呢?答案肯定是有的,笔者暂时知道的有以下两种方式:


1)这个适用于动态加载ImageView的,代码也渐渐,只要在添加View的时候,把大小写死就可以了

[java]   view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. LinearLayout.LayoutParams layoutParam = new LinearLayout.LayoutParams(4848);    
  2.         layout.addView(ibtnPen, layoutParam);    

2)除了动态加载view,更多的时候,我们还是会通过xml布局的方式引入ImageView的

解决方法也不难,就是通过drawable的Bitmap资源文件来完成,然后blackground属性设置为该文件即可!

这个xml文件在drawable文件夹下创建,这个文件夹是要自己创建的哦!!

pen_bg.xml:

[html]   view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <bitmap  
  2.     xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@id/pen_bg"  
  4.     android:gravity="top"  
  5.     android:src="@drawable/pen"  
  6.     android:tileMode="disabled" >  
  7. </bitmap>  

上述代码并不难理解,估计大家最迷惑的是titleMode属性吧,这个属性是平铺,就是我们windows设置

背景时候的平铺,多个小图标铺满整个屏幕捏!记得了吧!不记得自己可以试试!disabled就是把他给禁止了!

就是上面这串简单的代码,至于调用方法如下:

动态: ibtnPen.setBacklgroundResource(R.drawable.penbg);

静态: android:background = "@drawable/penbg"



三.设置透明度的问题

说完前面两个区别,接着再说下setAlpha属性咯!

这个很简单,这个属性,只有src时才是有效果的!!


!!!!   src设置setAlpha( )才有效果!!!!!



四.两者结合妙用:

这是网上的一张图:



一看去是一个简单的GridView,每个item都是一个ImageView,但是细心的你可能发现了,

上面的ICON都不是规则的,而是圆形,圆角矩形等等,于是乎这里用到了src + background了!



要实现上述的效果,你只需要两个操作:

找一张透明的png图片  +   设置一个黑色的背景

(当然你也可以设置png的透明度来实现,不过结果可能和预想的有出入哦!)


哈哈,呆萌呆萌的小猪就这样显示到ImageView上了,哈哈,blackground设置了蓝色背景!

代码如下:

[html]   view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <ImageView  
  2.     android:layout_width="150dp"  
  3.     android:layout_height="wrap_content"  
  4.     android:src="@drawable/pig"  
  5.     android:background="#6699FF" />  

另外,你也可以用selctor实现点击效果,设置不同的情况设置不同的图片,以实现点击或者触摸效果!



五.Java代码中设置blackground和src属性:

前景(对应src属性):setImageDrawable( );

背景(对应background属性):setBackgroundDrawable( );





好了,本节就到这里,如果对本文有什么疑问或者发现什么纰漏,欢迎告知,万分感激!!大笑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当一个View超出屏幕时,你可以使用ScrollView或者HorizontalScrollView来解决这个问题。 如果你想拖动一个ImageView,并且希望它不会超出屏幕,你可以使用以下代码: ```java imageView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { // 手指按下时记录位置 lastX = event.getRawX(); lastY = event.getRawY(); break; } case MotionEvent.ACTION_MOVE: { // 移动的距离 float dx = event.getRawX() - lastX; float dy = event.getRawY() - lastY; // 获取imageView的参数 RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) v.getLayoutParams(); // 移动imageView lp.leftMargin += dx; lp.topMargin += dy; // 确定imageView不会超出屏幕 int screenWidth = getResources().getDisplayMetrics().widthPixels; int screenHeight = getResources().getDisplayMetrics().heightPixels; if (lp.leftMargin < 0) { lp.leftMargin = 0; } else if (lp.leftMargin + v.getWidth() > screenWidth) { lp.leftMargin = screenWidth - v.getWidth(); } if (lp.topMargin < 0) { lp.topMargin = 0; } else if (lp.topMargin + v.getHeight() > screenHeight) { lp.topMargin = screenHeight - v.getHeight(); } // 重新设置imageView的参数 v.setLayoutParams(lp); // 更新位置记录 lastX = event.getRawX(); lastY = event.getRawY(); break; } case MotionEvent.ACTION_UP: { // 手指抬起时不需要做任何事情 break; } } return true; } }); ``` 这个代码片段会允许你拖动ImageView,但是它不会被拖动超出屏幕。如果ImageView被拖动到了屏幕边缘,它会停在那里并且无法继续拖动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值