android开发问题bitmap drawable一直会自动缩放

枫晚伴孤舟 2016-09-30 11:39:54
按照官方文档的说明:


当我们设置android:gravity="center"时,这个drawable就不会自动缩放来适应容器布局了,但是实际效果是我无论怎么设置,都会自动缩放,我使用了一个imageview,代码如下:

<ImageView
android:src="@drawable/mybitmap"
android:layout_centerInParent="true"

android:layout_width="400dp"
android:layout_height="300dp" />


mybitmap.xml:


<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/a1"
android:gravity="center">

</bitmap>



实际效果


除非我在imageview加入androidLscaleType = "center"

效果才是

请问这到底是什么原因,为什么bitmap的gravity属性不管用
...全文
335 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
枫晚伴孤舟 2016-09-30
  • 打赏
  • 举报
回复
引用 13 楼 yangchengtest 的回复:
图片有后景和前景之说,也就是BACKGROUND和SRC的区别。两个不同的图层。 TILEMODE应该只对BACKGROUND有效。 SRC是通过SCALETYPE设置。
我想了一下,感觉可能就是像你说的一样,bitmap主要用来对我们的图片设置各种属性,感觉传入src的时候,bitmap的属性都是无效的,只有imageview的scaletype才能对图片进行设置 而background时,bitmap的属性就能够生效了,就好比当我们设置图片的透明度等基本上也是通过background的方式来设置的
magicyang1234 2016-09-30
  • 打赏
  • 举报
回复
图片有后景和前景之说,也就是BACKGROUND和SRC的区别。两个不同的图层。 TILEMODE应该只对BACKGROUND有效。 SRC是通过SCALETYPE设置。
枫晚伴孤舟 2016-09-30
  • 打赏
  • 举报
回复
引用 10 楼 u012137924 的回复:
[quote=引用 8 楼 w71451000 的回复:]
笔误,但是为什么tilemode不起作用



http://blog.csdn.net/superjunjin/article/details/7670864[/quote]


background传值:

<ImageView

android:layout_centerInParent="true"

android:background="@drawable/mybitmap"
android:layout_width="400dp"
android:layout_height="300dp" />

效果


设置为src时:

<ImageView

android:layout_centerInParent="true"

android:src="@drawable/mybitmap"
android:layout_width="400dp"
android:layout_height="300dp" />、



效果:

枫晚伴孤舟 2016-09-30
  • 打赏
  • 举报
回复
引用 10 楼 u012137924 的回复:
[quote=引用 8 楼 w71451000 的回复:] 笔误,但是为什么tilemode不起作用
http://blog.csdn.net/superjunjin/article/details/7670864[/quote] imageview为填充,假设使bitmap的图片按比例填满了imageview布局大小,这时图片的tilemode不起作用可以理解, 但是我们队imageview的background设置bitmap,background也是自动拉伸图片,为什么,这时tilemode起作用了,
山鹰1985 2016-09-30
  • 打赏
  • 举报
回复
引用 8 楼 w71451000 的回复:
笔误,但是为什么tilemode不起作用
http://blog.csdn.net/superjunjin/article/details/7670864
枫晚伴孤舟 2016-09-30
  • 打赏
  • 举报
回复
网上资料是说imageview的src是不会缩放图片的,当我们直接放入一张图片,确实没问题,但是放入一个bitmap,src也会自动缩放bitmap里面的图片,反而将bitmap传入imageiew的background,bitmap设置的很多属性包括gravity,tilemode都能够很好的体现出来
枫晚伴孤舟 2016-09-30
  • 打赏
  • 举报
回复
引用 6 楼 qq_25412055 的回复:
[quote=引用 3 楼 w71451000 的回复:] [quote=引用 1 楼 qq_25412055 的回复:] scaleType是指填充方式,gravity是指布局位置,当然有区别啊
当我们不设置scaletype时,这时默认应该是bitmap填充这个imageview占得空间,但是不只是bitmap的gravity属性,androidLtilemode属性也不起作用,按照我的理解,当imageview设置为填充时,bitmap的容器布局大小就是imageview的大小,这时我们对bitmap设置android:tilemode应该是有作用的,但是实际情况是android:tilemode也没有了作用,[/quote] 默认值是FIT_CENTER,保持比例填充,并不是你说的占满整个空间[/quote] 笔误,但是为什么tilemode不起作用
枫晚伴孤舟 2016-09-30
  • 打赏
  • 举报
回复
引用 5 楼 u012137924 的回复:
[quote=引用 4 楼 w71451000 的回复:] 当我们不设置scaletype时,这时默认应该是bitmap填充这个imageview占得空间,但是不只是bitmap的gravity属性,androidLtilemode属性也不起作用,按照我的理解,当imageview设置为填充时,bitmap的容器布局大小就是imageview的大小,这时我们对bitmap设置android:tilemode应该是有作用的,但是实际情况是android:tilemode也没有了作用,
你的bitmap的像素是多少*多少的。你上面自己写了

android:layout_width="400dp"   
android:layout_height="300dp"
按我的理解来说,应该你的实际图片没有300dp,或者说按3/4比例缩放后不够300dp,所以才显示成那样子了。[/quote] 是啊,按比例填充满,但是为什么tilemode不起作用
LoveWyf_ 2016-09-30
  • 打赏
  • 举报
回复
引用 3 楼 w71451000 的回复:
[quote=引用 1 楼 qq_25412055 的回复:] scaleType是指填充方式,gravity是指布局位置,当然有区别啊
当我们不设置scaletype时,这时默认应该是bitmap填充这个imageview占得空间,但是不只是bitmap的gravity属性,androidLtilemode属性也不起作用,按照我的理解,当imageview设置为填充时,bitmap的容器布局大小就是imageview的大小,这时我们对bitmap设置android:tilemode应该是有作用的,但是实际情况是android:tilemode也没有了作用,[/quote] 默认值是FIT_CENTER,保持比例填充,并不是你说的占满整个空间
山鹰1985 2016-09-30
  • 打赏
  • 举报
回复
引用 4 楼 w71451000 的回复:
当我们不设置scaletype时,这时默认应该是bitmap填充这个imageview占得空间,但是不只是bitmap的gravity属性,androidLtilemode属性也不起作用,按照我的理解,当imageview设置为填充时,bitmap的容器布局大小就是imageview的大小,这时我们对bitmap设置android:tilemode应该是有作用的,但是实际情况是android:tilemode也没有了作用,
你的bitmap的像素是多少*多少的。你上面自己写了

android:layout_width="400dp"   
android:layout_height="300dp"
按我的理解来说,应该你的实际图片没有300dp,或者说按3/4比例缩放后不够300dp,所以才显示成那样子了。
枫晚伴孤舟 2016-09-30
  • 打赏
  • 举报
回复
引用 2 楼 u012137924 的回复:
[quote=引用 楼主 w71451000 的回复:]
scaleType 是描述 ImageView 的 content 也就是内容的,而 gravity 和 layout_centerInParent 是用来描述 ImageView 的,所以说描述的对象不一样,产生的效果自然就不同了。不知道我是否描述清楚,你应该能理解吧?[/quote] 当我们不设置scaletype时,这时默认应该是bitmap填充这个imageview占得空间,但是不只是bitmap的gravity属性,androidLtilemode属性也不起作用,按照我的理解,当imageview设置为填充时,bitmap的容器布局大小就是imageview的大小,这时我们对bitmap设置android:tilemode应该是有作用的,但是实际情况是android:tilemode也没有了作用,
枫晚伴孤舟 2016-09-30
  • 打赏
  • 举报
回复
引用 1 楼 qq_25412055 的回复:
scaleType是指填充方式,gravity是指布局位置,当然有区别啊
当我们不设置scaletype时,这时默认应该是bitmap填充这个imageview占得空间,但是不只是bitmap的gravity属性,androidLtilemode属性也不起作用,按照我的理解,当imageview设置为填充时,bitmap的容器布局大小就是imageview的大小,这时我们对bitmap设置android:tilemode应该是有作用的,但是实际情况是android:tilemode也没有了作用,
山鹰1985 2016-09-30
  • 打赏
  • 举报
回复
引用 楼主 w71451000 的回复:
按照官方文档的说明: 当我们设置android:gravity="center"时,这个drawable就不会自动缩放来适应容器布局了,但是实际效果是我无论怎么设置,都会自动缩放,我使用了一个imageview,代码如下: <ImageView android:src="@drawable/mybitmap" android:layout_centerInParent="true" android:layout_width="400dp" android:layout_height="300dp" /> mybitmap.xml: <?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/a1" android:gravity="center"> </bitmap> 实际效果 除非我在imageview加入androidLscaleType = "center" 效果才是 请问这到底是什么原因,为什么bitmap的gravity属性不管用
scaleType 是描述 ImageView 的 content 也就是内容的,而 gravity 和 layout_centerInParent 是用来描述 ImageView 的,所以说描述的对象不一样,产生的效果自然就不同了。不知道我是否描述清楚,你应该能理解吧?
LoveWyf_ 2016-09-30
  • 打赏
  • 举报
回复
scaleType是指填充方式,gravity是指布局位置,当然有区别啊

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧