android中如何动态修改ImageView中图片的大小 比如说点击该图片后图片能变大
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android中如何动态修改ImageView中图片的大小 比如说点击该图片后图片能变大相关的知识,希望对你有一定的参考价值。
使用位图(Bitmap)再重新绘制遍
//原位图
Bitmap btm1 = BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.hh);
BitmapDrawable bd1=BitmapDrawable(btm1);
imageView.setBackgroundDrawable(bd1);
放大后 滑动时计算 图片的边是否在屏幕外,如果在屏幕外就可移动,比如 向上滑动,是想看图片下面的部分,此时计算图片的底边是否在屏幕外,如果是,就可以向上移动图片。
Scaletype的设置的方式包括:
1、在layout xml中定义android:scaleType="CENTER"
2、或在代码中调用imageView.setScaleType(ImageView.ScaleType.CENTER);
扩展资料:
根据位深度,可将位图分为1、4、8、16、24及32位图像等。每个像素使用的信息位数越多,可用的颜色就越多,颜色表现就越逼真,相应的数据量越大。
例如,位深度为 1 的像素位图只有两个可能的值(黑色和白色),所以又称为二值位图。位深度为 8 的图像有 2^8(即 256)个可能的值。位深度为 8 的灰度模式图像有 256 个可能的灰色值。
RGB图像由三个颜色通道组成。8 位/通道的 RGB 图像中的每个通道有 256 个可能的值,这意味着该图像有 1600 万个以上可能的颜色值。
有时将带有 8 位/通道 (bpc) 的 RGB 图像称作 24 位图像(8 位 x 3 通道 = 24 位数据/像素)。通常将使用24位RGB组合数据位表示的的位图称为真彩色位图。
参考资料来源:百度百科-Bitmap
参考技术A 使用位图(Bitmap)再重新绘制一遍就可以了。//原位图
Bitmap btm1 = BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.hh);
BitmapDrawable bd1=BitmapDrawable(btm1);
imageView.setBackgroundDrawable(bd1);
//点击后变大的位图:
Bitmap btm2=Bitmap.createScaledBitmap(btm1, 40, 50, false); //这里你可以自定义它的大小
BitmapDrawable bd2=BitmapDrawable(btm2);
imageView.setBackgroundDrawable(bd2); 参考技术B 1.imageview 有个属性scaleType,把它设置为矩阵(matrix),然后操作矩阵可以放大缩小
2.操作LayoutParams,直接改变控件的大小 参考技术C 1、这个图片大小是通过触摸屏实现的;
2、操作需俩手指配合;
3、具体步骤:放大:俩手指处靠近状态,同时接触屏幕中心,然后俩手指同时从中心往外划动即可;缩小,反之; 参考技术D 使用位图(Bitmap)再重新绘制遍
//原位图
Bitmap btm1 = BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.hh);
BitmapDrawable bd1=BitmapDrawable(btm1);
imageView.setBackgroundDrawable(bd1);
//点击变位图:
Bitmap btm2=Bitmap.createScaledBitmap(btm1, 40, 50, false); //自定义
BitmapDrawable bd2=BitmapDrawable(btm2);
imageView.setBackgroundDrawable(bd2);
如何动态更改 ImageView 高度
【中文标题】如何动态更改 ImageView 高度【英文标题】:How to dynamically change ImageView Height 【发布时间】:2013-05-06 11:25:11 【问题描述】:我有一个简单的线性布局用于 ListView 的单元格,它有一个 imageview。图片是从网上下载的,所以大小可以不同。
但是,我想将imageview的宽度设置为fill_parent,这是固定的,并在运行时动态改变图像高度。设置图像高度的规则: 如果图片的h/w比大于1,把ImageView做成正方形,意思是高度和宽度匹配。
如果图像的 h/w 比小于 1,则按比例调整大小。预计有两个样本如下。
第一个是 h/w1。
谢谢你的时间。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:background="@color/white"
android:orientation="vertical"
android:padding="10dp" >
<TextView
android:id="@+id/postTitle"
android:layout_
android:layout_
android:ellipsize="end"
android:maxLines="2"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/postImg"
android:layout_
android:layout_
android:layout_marginTop="10dp"
android:scaleType="centerCrop"
android:src="@drawable/dummy_image"
android:contentDescription="@string/postImage" />
</LinearLayout>
【问题讨论】:
【参考方案1】:你需要继承 ImageView
覆盖onMeasure,我没有测试过,但是你需要的所有变量都在那里,这个想法是正确的。您只需将图像的纵横比应用到图像视图的高度,如果它大于宽度,则将其设置为宽度。
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
Drawable drawable = getDrawable();
if (drawable != null)
//get imageview width
int width = MeasureSpec.getSize(widthMeasureSpec);
int diw = drawable.getIntrinsicWidth();
int dih = drawable.getIntrinsicHeight();
float ratio = (float)diw/dih; //get image aspect ratio
int height = width * ratio;
//don't let height exceed width
if (height > width)
height = width;
setMeasuredDimension(width, height);
else
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
【讨论】:
会发生什么,因为这些设置会缩放图像,使宽度是静态的,而高度会根据图像的纵横比拉动。 我展示的xml是用于适配器的getview,ImageView从url动态加载图像 其实我会问“如何获得 fill_parent 的实际 px 大小”,我通过 DisplayMetrics 弄清楚了 要做你正在做的事情,你真的不需要这样做......你能发布问题的截图吗? 更新问题,请看。谢谢【参考方案2】:代码中从url加载imageView的地方,要在那边设置ImageView的布局参数。它将动态更改图像的尺寸。
加载图像后,找到尺寸并计算比例并根据您要应用的条件更改尺寸。
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(width,height);
imageView.setLayoutParams(layoutParams);
//set other properties of the imageview according to your condition
【讨论】:
我有图片尺寸。那么问题来了,我怎么知道要为 ImageView 设置什么高度?我通过 displaymetrics.widthPixels 减去我在 xml 布局中设置的边距(dp 到 px 转换)来做到这一点。这是最好的方法吗?谢谢以上是关于android中如何动态修改ImageView中图片的大小 比如说点击该图片后图片能变大的主要内容,如果未能解决你的问题,请参考以下文章
如何从 URL 解析带有 Windows Phone 8 中图像的 Json 数据?动态数据