1.获取资源文件中图片的大小,最简单的最直接的方法,就是使用Drawable的getIntrinsicHeight()和getIntrinsicWidth();
2.利用Bitmap来获取其大小,本质上和第一种方式没什么区别:
/**
* 计算ImageView的大小(BitmapDrawable)
*
* @param resources
* @param resourceId
* @return
*/
public static int[] computeWH(Resources resources, int resourceId) {
int[] wh = { 0, 0 };
if (resources == null)
return wh;
Bitmap mBitmap = BitmapFactory.decodeResource(resources, resourceId);
BitmapDrawable bDrawable = new BitmapDrawable(resources, mBitmap);
wh[0] = bDrawable.getIntrinsicWidth();
wh[1] = bDrawable.getIntrinsicHeight();
return wh;
}
3.可以利用BitmapFactory.Options的outWidth和outHeight两个参数获取其大小,下面给出简单的3种方法供参考:
注意:设置inJustDecodeBounds为true后,decodeFile并不分配空间,即,BitmapFactory解码出来的Bitmap为Null,但可计算出原始图片的长度和宽度。
/**
* 计算ImageView的大小(decodeFileDescriptor)
*
* @param imageFile
* @return
*/
public static int[] computeWH_1(String imageFile) {
int[] wh = { 0, 0 };
if (imageFile == null || imageFile.length() == 0)
return wh;
try {
FileDescriptor fd = new FileInputStream(imageFile).getFD();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 1;
options.inJustDecodeBounds = true;
BitmapFactory.decodeFileDescriptor(fd, null, options);
if (options.mCancel || options.outWidth == -1
|| options.outHeight == -1) {
return wh;
}
wh[0] = options.outWidth;
wh[1] = options.outHeight;
} catch (Exception e) {
}
return wh;
}
/**
* 计算ImageView的大小(decodeFile)
*
* @param imgFile
* @return
*/
public static int[] computeWH_2(String imgFile) {
int[] wh = { 0, 0 };
if (imgFile == null || imgFile.length() == 0)
return wh;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 1;
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(imgFile, options);
if (options.mCancel || options.outWidth == -1
|| options.outHeight == -1) {
return wh;
}
wh[0] = options.outWidth;
wh[1] = options.outHeight;
return wh;
}
/**
* 计算ImageView的大小(decodeResource)
*
* @param resources
* @param resourceId
* @return
*/
public static int[] computeWH_3(Resources resources, int resourceId) {
int[] wh = { 0, 0 };
if (resources == null)
return wh;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 1;
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(resources, resourceId, options);
if (options.mCancel || options.outWidth == -1
|| options.outHeight == -1) {
return wh;
}
wh[0] = options.outWidth;
wh[1] = options.outHeight;
return wh;
}
分享到:
相关推荐
这个“android圆形ImageView实现带自定义大小”的话题正是关于如何在Android应用中创建一个可以自由调整大小的圆形图片视图。 首先,我们可以创建一个自定义的ImageView子类,命名为CircleImageView。在该子类中,...
一种方法是动态计算缩放比例,使得图片的宽高不超过ImageView的宽高: ```java float scaleWidth = Math.min((float) mainImageView.getWidth() / overlayImageView.getDrawable().getIntrinsicWidth(), (float) ...
- **scaleType**:ImageView的缩放类型,包括center、centerCrop、centerInside、fitCenter、fitEnd、fitStart、fitXY等,用于控制图片如何适应ImageView的大小。 - **adjustViewBounds**:如果设置为true,...
首先,我们创建一个新的Java类,继承自Android的ImageView类。这个类将会是我们自定义功能的核心: ```java public class CustomImageView extends ImageView { // 添加必要的属性和变量 } ``` ### 1. 实现缩放...
对于ImageView的优化,Android提供了inSampleSize参数,用于减小Bitmap的加载大小,减少内存消耗。通过设置合理的inSampleSize值,可以使得大图在加载时自动缩小到适合的大小,再由ImageView进行后续的缩放处理。 ...
【Android圆角ImageView详解】 在Android开发中,我们经常需要为ImageView添加圆角效果,以实现各种美观的界面设计。这个“Android 圆角ImageView”项目是一个毕业设计的学习示例,它展示了如何自定义一个ImageView...
`Android imageview添加水印`这个话题就是关于如何在ImageView组件上动态地添加水印。通常,我们可以通过自定义ImageView控件来实现这一功能,这样做有以下几个好处: 1. **提高代码复用性**:自定义控件可以封装...
接下来,我们需要重写`onMeasure()`方法,这是Android控件计算其大小的关键函数。在`onMeasure()`中,我们将根据宽高比来确定ImageView的宽度和高度。 ```java @Override protected void onMeasure(int ...
4. **双击放大/缩小**:为了提高用户体验,可缩放ImageView通常还包含双击手势的处理,一次双击可以将图像放大到适合屏幕的大小,再次双击则恢复原始比例。 5. **平滑滚动和缩放**:为了提供更流畅的体验,组件可能...
2. 在onTouchEvent()方法中,根据ACTION_DOWN、ACTION_MOVE和ACTION_UP事件,计算出手指移动的距离,并通过Matrix的postTranslate()方法更新ImageView的位置。 对于两点缩放,我们需要使用ScaleGestureDetector来...
在Android开发中,Imageview是用于显示图像的基本组件。然而,为了提供更加丰富的用户体验,我们经常需要实现一些高级功能,比如多点触碰(Multitouch)支持,使得用户能够通过手势来拖拽图片、移动图片位置以及缩放...
`Android-RatioImageView-根据比例自动计算宽高的ImageView`项目就是为了解决这个问题而创建的。 `RatioImageView`是一个自定义的Android视图组件,它扩展了原生的`ImageView`,并添加了自动计算宽高比的功能。...
在Android开发中,ImageView是用于显示单张图片或者进行图片操作的一个重要组件。然而,有时候开发者需要实现更复杂的视觉效果,比如图片循环跑马灯效果。这个"Android ImageView图片循环跑马灯效果源码"就是一个...
在Android开发中,"圆形ImageView"是一种常见的UI设计元素,用于显示用户头像、应用图标等需要呈现为圆形的图像。这种特殊的ImageView组件能够将矩形图像转换为圆形,为应用提供更加美观和统一的视觉效果。下面我们...
在Android开发中,圆角ImageView是一种常见的需求,它允许我们展示带有圆角或者完全圆形的图片,提升应用的视觉效果。本压缩包“android 圆角ImageView源码.rar”包含了实现这一功能的源代码,主要文件有“readme.md...
这个类主要用于检测双指缩放手势,其工作原理是基于Android的MotionEvent事件流,监听手指在屏幕上的移动变化,计算出缩放比例。 创建ScaleGestureDetector对象时,我们需要传入一个实现了`ScaleGestureDetector....
在Android开发中,实现“长按ImageView产生预览并随手指移动”的功能,通常涉及到手势检测、图片处理和自定义视图等技术。这个功能可以让用户在长按图像后,出现一个半透明的预览图,并能通过手指的拖动操作来移动这...
通过这种方式,我们不仅实现了在固定大小的ImageView中显示图片的指定区域,还提供了灵活的配置方式,可以根据应用的需求进行定制。这在处理大量图片或者有特殊显示需求的场景下非常有用,比如展示局部细节、裁剪...
首先,我们需要创建一个新的Java类,继承自Android的ImageView类。在这个类中,我们将添加额外的方法和属性来处理拖拽、缩放和旋转的操作。关键的步骤包括以下几个部分: 1. **初始化触摸事件**:在自定义控件中,...
在上面的代码中,`layout_width`设定了ImageView的宽度为200dp,`layout_height`设为`wrap_content`,这意味着高度将根据图片的实际大小来计算,保持与宽度的原始比例。`scaleType`被设置为`fitCenter`,确保图片按...