Android图片缩放方法

合集下载

android matrix 用法

android matrix 用法

android matrix 用法Matrix是Android中一个非常强大的类,它可以实现很多复杂的图形变换操作,如旋转、缩放、扭曲等。

Matrix的使用非常广泛,几乎在所有的图形处理中都有应用。

下面将介绍Matrix的基本用法。

1. 创建Matrix对象Matrix的创建非常简单,只需使用Matrix的默认构造函数即可: Matrix matrix = new Matrix();2. 基本变换操作Matrix提供了一系列基本变换操作,如平移、旋转、缩放、扭曲等。

这些操作都可以通过Matrix的方法来实现。

下面我们将介绍这些基本变换操作的用法。

2.1 平移平移操作可以将原来的图形沿x轴和y轴方向移动一定的距离。

Matrix的postTranslate方法可以实现平移操作,如下所示:matrix.postTranslate(dx, dy);其中dx和dy分别表示沿x轴和y轴方向的平移距离,可以是正数也可以是负数。

2.2 旋转旋转操作可以将原来的图形绕某个点旋转一定的角度。

Matrix的postRotate方法可以实现旋转操作,如下所示:matrix.postRotate(degrees, px, py);其中degrees表示旋转的角度,px和py表示旋转的中心点坐标。

2.3 缩放缩放操作可以将原来的图形在x轴和y轴方向上缩放一定的比例。

Matrix的postScale方法可以实现缩放操作,如下所示:matrix.postScale(sx, sy, px, py);其中sx和sy分别表示在x轴和y轴方向上的缩放比例,px和py表示缩放的中心点坐标。

2.4 扭曲扭曲操作可以将原来的图形进行扭曲变换,使得图形的形状发生改变。

Matrix的setSkew和setPolyToPoly方法可以实现扭曲操作。

这里不做详细介绍。

3. 相关方法除了基本变换操作外,Matrix还提供了一些相关的方法,如invert、mapPoints、mapRect等。

AndroidLuBan与Compressor图片压缩方式

AndroidLuBan与Compressor图片压缩方式

AndroidLuBan与Compressor图⽚压缩⽅式之前选择压缩图⽚库,在github上找的这个star最多的,使⽤⽅法是传⼊图⽚数组,在异步线程中回调返回的结果。

接下来就出现问题了,压缩的图⽚质量模糊,虽然可以设置多少KB⼀下不压缩,在正常⼿机屏幕压缩没太⼤问题。

但是在平板,同⼀张图⽚,压缩就会模糊。

Luban.with(this).load(photos) // 传⼈要压缩的图⽚列表.ignoreBy(100) // 忽略不压缩图⽚的⼤⼩.setTargetDir(getPath()) // 设置压缩后⽂件存储位置.setCompressListener(new OnCompressListener() { //设置回调@Overridepublic void onStart() {// TODO 压缩开始前调⽤,可以在⽅法内启动 loading UI}@Overridepublic void onSuccess(File file) {// TODO 压缩成功后调⽤,返回压缩后的图⽚⽂件***在此判断是否压缩完毕,根据返回的图⽚++与原数组size⽐较***}@Overridepublic void onError(Throwable e) {// TODO 当压缩过程出现问题时调⽤}}).launch(); //启动压缩这个压缩是在主线程中的耗时操作,需要⾃⼰去写⼀个异步线程,并通过handler传递消息到主线程。

.setMaxWidth(640).setMaxHeight(480)这两个数值越⾼,压缩⼒度越⼩,图⽚也不清晰,.setQuality(75)这个⽅法只是设置图⽚质量,并不影响压缩图⽚的⼤⼩KB.setCompressFormat(pressFormat.WEBP) WEBP图⽚格式是Google推出的压缩强,质量⾼,但是IOS不识别,需要把图⽚转为字节流然后转PNG格式.setCompressFormat(pressFormat.PNG)PNG格式的压缩,会导致图⽚变⼤,并耗过⼤的内存,⼿机反应缓慢.setCompressFormat(pressFormat.JPEG)JPEG压缩;压缩速度⽐PNG快,质量⼀般,基本上属于1/10的压缩⽐例try {File file = new Compressor(activity).setMaxWidth(640).setMaxHeight(480).setQuality(100).setCompressFormat(pressFormat.JPEG).setDestinationDirectoryPath(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath()).compressToFile(new File(filePath));String imageString=file.getPath();paths.add(imageString);} catch (IOException e) {e.printStackTrace();}在此判断paths的⼤⼩是否等于图⽚数组⼤⼩,判断是否调⽤handler传递消息到主线程去坐其他操作以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

imageview设置大小的方法

imageview设置大小的方法

imageview设置大小的方法哎,说起这个ImageView设置大小的事儿,我得跟你唠唠我那次“摸爬滚打”的经历。

那时候,我刚接触Android开发不久,就像是刚学会走路的小屁孩,对一切都充满了好奇,但也经常摔跟头。

那天,我接到了一个任务,就是要把一个图片显示在App的某个页面上,还得按照设计图的大小来显示。

我心想,这有啥难的,不就是把图片往ImageView里一放,然后调调大小嘛。

结果,嘿,我还真就栽在了这个“调调大小”上。

一开始,我直接在布局文件里给ImageView设了个固定的宽高,心想这下总行了吧。

结果一运行,图片要么被拉得老长,要么就被压得扁扁的,根本就不是设计图上的那个样儿。

我心里那个急啊,就像是热锅上的蚂蚁,团团转。

后来,我上网搜了搜,发现原来ImageView有个属性叫“scaleType”,可以控制图片的缩放方式。

我心里一亮,这不就是我要找的“救星”嘛!于是,我就开始研究起这个“scaleType”来。

我试着把“scaleType”设成了“centerCrop”,结果图片是居中显示了,但还是被裁剪了一部分,看着就像是被谁咬了一口的大饼,心里那个别扭啊。

我又换成了“fitCenter”,这次图片是完整显示了,但又被缩放得小小的,看着就像是营养不良的小孩儿,一点都不精神。

就在我快要崩溃的时候,我突然发现了一个叫“adjustViewBounds”的属性。

我心里那个激动啊,就像是沙漠里找到了水源,赶紧把它设成了“true”。

嘿,你还别说,这一设,图片就自动调整到了合适的大小,既没有被裁剪,也没有被缩放得太小,看着就让人舒心。

那一刻,我心里那个美啊,就像是考试得了满分一样,成就感爆棚。

我赶紧把这个方法告诉了同事,他们也都夸我这个方法好用,简单又实用。

现在回想起来,那次经历虽然有点曲折,但也让我学到了不少东西。

我明白了,遇到问题不能怕,得多尝试,多找方法。

就像那次设置ImageView大小一样,虽然一开始遇到了不少困难,但最终还是被我找到了合适的解决方案。

Android让图片等比例缩放的三种方法

Android让图片等比例缩放的三种方法

Android让图⽚等⽐例缩放的三种⽅法⽅法⼀:客户端等⽐例 前提条件:服务器端需要返回原始图⽚的“宽和⾼”或者“宽⾼缩放⽐例”,客户端要显⽰的图⽚的宽或者⾼只要其⼀是固定的(例如:⾼度为200,宽度未知,或者⾼度为400宽度未知) 在这种条件下客户端可以根据服务端返回的图⽚的宽⾼或者宽⾼⽐例计算出图⽚相对于屏幕的宽或者⾼。

例如:缩放⽐例为:宽(图⽚原始宽度200px)/⾼(图⽚原始⾼度400px) = 0.5 。

客户端定义要显⽰的宽度为100px,则根据缩放⽐例⾼度应该显⽰200px(100/0.5=200)图⽚才不会变形。

android:scaleType="fitXY"⽅法⼆:服务端等⽐例 前提条件:客户端必须告诉服务端他要拿到的图⽚的宽度和⾼度。

服务端根据客户端给出的宽⾼,按照服务端能给到的最优⽅案返回⼀张按照等⽐例缩放的缩略图,给客户端显⽰ android:scaleType="fitXY"⽅法三:客户端+服务端都等⽐例缩放 ⽅法⼀和⽅法⼆都能够在⼀定程度上解决图⽚按等⽐例⽅式显⽰,但是都具有⼀定的不⾜,第⼀种⽅法的不⾜之处是:服务端返回的图⽚是原图,⽐较浪费流量和⼿机内存。

第⼆中⽅法的不⾜之处是,有时候客户端给到服务端的宽⾼,服务端并不能够按照客户端的要求返回。

因此在显⽰上会出现⼀定的拉伸或者压缩。

⽐较好的⼀种⽅法是:第⼀种⽅法+第⼆种⽅法。

⾸先服务端会给到客户端原始图⽚的宽⾼⽐例,客户端根据宽⾼⽐例,计算出最优的要显⽰到界⾯上的宽和⾼给到服务器。

服务器拿到客户端给的宽⾼之后,计算出⼀个缩略图给到客户端,之后客户端拿到这张图⽚直接显⽰。

android:scaleType="fitXY"。

androidphotoview用法

androidphotoview用法

androidphotoview用法PhotoView是一个开源项目,用于在Android上实现图片缩放和拖动的功能。

它是ImageView的一个子类,在缩放和拖动方面提供了更多的灵活性和功能。

下面将介绍PhotoView的用法以及一些常见的用例。

首先,要开始使用PhotoView,需要将其添加到您的项目中。

可以通过添加以下依赖项将其添加到您的build.gradle文件中:``````PhotoView的使用方式与普通的ImageView非常相似。

您可以在布局文件中像这样声明PhotoView:```xml```然后,您可以在代码中找到该视图并使用它。

您可以通过findViewById或在Kotlin中使用视图绑定来获取对视图的引用。

```java// 在Java中查找PhotoViewPhotoView photoView = findViewById(R.id.photo_view);// 在Kotlin中使用视图绑定来查找PhotoViewval photoView: PhotoView = findViewById(R.id.photo_view)```接下来,您可以开始使用PhotoView的功能,例如缩放和拖动。

以下是一些常见的用例:1.缩放图片:PhotoView允许用户通过手势缩放图片。

默认情况下,用户可以使用双指捏放手势来缩放图片。

您也可以通过设置setZoomable方法来禁用或启用该功能。

```java// 在Java中禁用缩放功能photoView.setZoomable(false);// 在Kotlin中禁用缩放功能photoView.setZoomable(false)```2.设置加载的图片:您可以通过调用setImageDrawable或setImageResource方法来设置要显示的图片。

这对于在代码中动态更改要显示的图片非常有用。

```java//设置加载的图片photoView.setImageDrawable(getResources(.getDrawable(R.drawa ble.my_image));// 在Kotlin中设置加载的图片photoView.setImageDrawable(getDrawable(R.drawable.my_image)) ```3.添加监听器:您可以为PhotoView添加一个OnMatrixChangedListener监听器来监听图片缩放和拖动的变化。

android matrix scale公式

android matrix scale公式

android matrix scale公式在Android开发中,可以使用Matrix类中的scale方法来对绘制的图形、位图或视图进行缩放操作。

scale方法的原型如下:```java
public boolean scale (float scaleX, float scaleY)
```
其中,scaleX和scaleY分别表示水平和垂直方向上的缩放比例。

当scaleX和scaleY大于1时,表示放大;当scaleX和scaleY小于1时,表示缩小;当scaleX和scaleY等于1时,表示无缩放。

同时,可以通过设置缩放的中心点来调整缩放的位置。

```java
public boolean scale (float scaleX, float scaleY, float pivotX, float pivotY)
```
其中,pivotX和pivotY分别表示缩放的中心点在水平和垂直方向上的坐标位置。

拓展:
Matrix的scale方法还可以实现非均匀缩放,即在水平和垂直方向上的缩放比例可以不同。

```java
public boolean scale (float scaleX, float scaleY, float pivotX, float pivotY)
```
需要注意的是,Matrix的缩放操作是基于当前Matrix的状态进行变换的,如果需要每次都是基于初始状态进行缩放,则需要重置Matrix的状态。

Android系统图标设计规范

Android系统图标设计规范

浅谈Android系统的图标设计规范目前移动平台的竞争日益激烈,友好的用户界面可以帮助提高用户体验满意度,图标Icon是用户界面中一个重要的组成部分,今天我们来研究和学习一下Android系统的图标设计规范。

在探讨Android的icon设计之前,我们有必要先了解Android的界面是如何适配多样化屏幕的。

适配性由于同一个UI元素(如100 x100像素的图片)在高精度的屏幕上要比低精度的屏幕上看起来要小,为了让这两个屏幕上的图片看起来效果差不多,可以采用以下两种方法:程序将图片进行缩放,但是效果较差。

为这两个精度屏幕的手机各提供一个图片。

但是屏幕的参数多样化,如果为每一个精度的屏幕都设计一套icon,工作量大并且不能满足程序的兼容性要求,势必要对屏幕的分级,如在160dpi和180dpi的手机屏幕上采用同一套icon,当这套icon在240dpi效果满足不了设计要求,就需要另做一套稍大些的icon。

在Android 1.5以及更早的版本中,只支持3.2″ 屏幕上的HVGA (320×480)分辨率,开发人员也不需要考虑界面的适配性问题。

从Android 1.6之后,平台支持多种尺寸和分辨率的设备,这也就意味着开发人员在设计时要考虑到屏幕的多样性。

为了简化设计并且兼容更多的手机屏幕,平台依照尺寸和分辨率对屏幕进行了区分: 三种尺寸:大,中,小。

三种精度:高(hdpi),中(mdpi)和低(ldpi)。

程序可以为这三种尺寸的屏幕提供默认资源,如有需要,还可以为各种精度的屏幕提供资源。

在运行时,系统会根据屏幕布局加载正确尺寸或者精度的图片。

Android支持的屏幕Android程序为最佳显示效果提供了三种方法:1.图片缩放基于当前屏幕的精度,平台自动加载任何未经缩放的限定尺寸和精度的图片。

如果图片不匹配,平台会加载默认资源并且在放大或者缩小之后可以满足当前界面的显示要求。

例如,当前为高精度屏幕,平台会加载高精度资源(如图片),如果没有,平台会将中精度资源缩放至高精度。

手机图片如何压缩变小

手机图片如何压缩变小

手机图片怎么压缩变小?手机现在基本上已经和相机有的一拼了,很多人为了方便就会用手机拍摄照片,手机拍摄出来的照片一般都会比较大,怎么进行图片压缩呢?下面一起来看看图片压缩的方法!
借助图片压缩的软件压缩图片
1:首先需要将手机上的图片导出到电脑上并保存好。

之后打开压缩软件点击图片压缩进入到操作界面中。

2:添加要进行压缩的图片,点击添加文件或者添加文件夹的按钮就可以选择。

也可以直接将图片拖拽进去。

3:图片添加好在操作界面会有图片格式以及图片大小的显示,压缩之前图片的信息会清楚的展现出来。

4:压缩之前可以选择一个图片压缩的选项,有输出格式和压缩选项可以选择,根据需要选择一个合适的即可。

5:压缩好的图片可以保存在原文件夹中,也可以自定义保存的位置。

6:最后可以开始压缩添加的图片了,点击页面右下角开始压缩的按钮即可开始压缩。

手机图片怎么压缩变小的方法就介绍这么多啦,感兴趣的话自己可以再去发现其它方法!。

详解Android图片的三级缓存及图片压缩

详解Android图片的三级缓存及图片压缩

详解Android图⽚的三级缓存及图⽚压缩为什么需要图⽚缓存Android默认给每个应⽤只分配16M的内存,所以如果加载过多的图⽚,为了防⽌内存溢出,应该将图⽚缓存起来。

图⽚的三级缓存分别是:内存缓存本地缓存⽹络缓存其中,内存缓存应优先加载,它速度最快;本地缓存次优先加载,它速度也快;⽹络缓存不应该优先加载,它⾛⽹络,速度慢且耗流量。

三级缓存的具体实现⽹络缓存根据图⽚的url去加载图⽚在本地和内存中缓存public class NetCacheUtils {private LocalCacheUtils mLocalCacheUtils;private MemoryCacheUtils mMemoryCacheUtils;public NetCacheUtils(LocalCacheUtils localCacheUtils,MemoryCacheUtils memoryCacheUtils) {mLocalCacheUtils = localCacheUtils;mMemoryCacheUtils = memoryCacheUtils;}/*** 从⽹络下载图⽚** @param ivPic* @param url*/public void getBitmapFromNet(ImageView ivPic, String url) {new BitmapTask().execute(ivPic, url);// 启动AsyncTask,// 参数会在doInbackground中获取}/*** Handler和线程池的封装** 第⼀个泛型: 参数类型第⼆个泛型: 更新进度的泛型, 第三个泛型是onPostExecute的返回结果***/class BitmapTask extends AsyncTask<Object, Void, Bitmap> {private ImageView ivPic;private String url;/*** 后台耗时⽅法在此执⾏, ⼦线程*/@Overrideprotected Bitmap doInBackground(Object... params) {ivPic = (ImageView) params[0];url = (String) params[1];ivPic.setTag(url);// 将url和imageview绑定return downloadBitmap(url);}/*** 更新进度, 主线程@Overrideprotected void onProgressUpdate(Void... values) {super.onProgressUpdate(values);}/*** 耗时⽅法结束后,执⾏该⽅法, 主线程*/@Overrideprotected void onPostExecute(Bitmap result) {if (result != null) {String bindUrl = (String) ivPic.getTag();if (url.equals(bindUrl)) {// 确保图⽚设定给了正确的imageviewivPic.setImageBitmap(result);mLocalCacheUtils.setBitmapToLocal(url, result);// 将图⽚保存在本地mMemoryCacheUtils.setBitmapToMemory(url, result);// 将图⽚保存在内存System.out.println("从⽹络缓存读取图⽚啦...");}}}}/*** 下载图⽚** @param url* @return*/private Bitmap downloadBitmap(String url) {HttpURLConnection conn = null;try {conn = (HttpURLConnection) new URL(url).openConnection();conn.setConnectTimeout(5000);conn.setReadTimeout(5000);conn.setRequestMethod("GET");conn.connect();int responseCode = conn.getResponseCode();if (responseCode == 200) {InputStream inputStream = conn.getInputStream();//图⽚压缩处理BitmapFactory.Options option = new BitmapFactory.Options();option.inSampleSize = 2;//宽⾼都压缩为原来的⼆分之⼀, 此参数需要根据图⽚要展⽰的⼤⼩来确定 option.inPreferredConfig = Bitmap.Config.RGB_565;//设置图⽚格式Bitmap bitmap = BitmapFactory.decodeStream(inputStream, null, option);return bitmap;}} catch (Exception e) {e.printStackTrace();} finally {conn.disconnect();}return null;}}本地缓存两个⽅法:设置本地缓存,获取本地缓存public class LocalCacheUtils {public static final String CACHE_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + "/local_cache";/*** 从本地sdcard读图⽚public Bitmap getBitmapFromLocal(String url) {try {String fileName = MD5Encoder.encode(url);File file = new File(CACHE_PATH, fileName);if (file.exists()) {Bitmap bitmap = BitmapFactory.decodeStream(new FileInputStream(file));return bitmap;}} catch (Exception e) {e.printStackTrace();}return null;}/*** 向sdcard写图⽚** @param url* @param bitmap*/public void setBitmapToLocal(String url, Bitmap bitmap) {try {String fileName = MD5Encoder.encode(url);File file = new File(CACHE_PATH, fileName);File parentFile = file.getParentFile();if (!parentFile.exists()) {// 如果⽂件夹不存在, 创建⽂件夹parentFile.mkdirs();}// 将图⽚保存在本地press(CompressFormat.JPEG, 100,new FileOutputStream(file));} catch (Exception e) {e.printStackTrace();}}}内存缓存两个⽅法:设置内存缓存,获取内存缓存问题:如果使⽤HashMap存储图⽚时,当图⽚越来越多时,会导致内存溢出,因为它是强引⽤,java的垃圾回收器不会回收。

移动应用开发中的图片处理与特效技巧

移动应用开发中的图片处理与特效技巧

移动应用开发中的图片处理与特效技巧在移动应用开发中,图片处理与特效的运用是非常重要的一环。

通过合理的图片处理与特效技巧,可以提升用户的使用体验,增加应用的吸引力和竞争力。

本文将探讨一些常见的图片处理和特效技巧,帮助开发者们打造更加出色的移动应用。

一、图片处理技巧1. 图片压缩:移动应用的图片资源通常需要在小尺寸的屏幕上显示,并且需要快速加载。

因此,对图片进行压缩是常见的处理方式。

开发者可以通过减少图片的尺寸和色彩深度来降低图片大小,从而减小应用的体积和加载时间。

同时,利用现代的图片压缩算法,可以保证对图片质量的最小损失。

2. 图片裁剪和缩放:有时候,原始图片并不直接适配应用的需要。

开发者可以通过裁剪或者缩放图片来满足应用的设计要求。

比如,通过裁剪一张长图,可以将其变成一组小图片,并通过滑动效果来展示。

而缩放图片可以使得它们适应不同屏幕尺寸,保证在不同设备上的合适展示效果。

3. 图片格式转换:针对不同的需求,选择合适的图片格式也是一项重要工作。

JPEG格式适用于照片等色彩丰富的图片,可以在保持相对较好的质量的同时,降低文件大小。

而PNG格式则适合保留透明通道,以及对色彩准确性有较高要求的图片。

二、图片特效技巧1. 滤镜效果:滤镜可以为图片增加一定的艺术效果,例如黑白滤镜、怀旧滤镜、复古滤镜等。

移动应用中,开发者可以借助现成的滤镜库或者自行开发滤镜算法,通过调整图片参数和处理方法,给用户带来不同的视觉体验。

2. 图片叠加:通过将多张图片叠加在一起,可以创造出新的效果。

开发者可以利用这一技巧来制作图片拼接、图文相结合的效果等。

例如,在社交应用中,用户可以将自己的头像叠加在不同的主题背景上进行分享。

3. 动态特效:除了静态的图片,动态特效也是移动应用中常见的处理方式。

开发者可以通过添加动画、视频、粒子效果等来增强图片的表现力。

例如,在一款游戏应用中,通过为角色的攻击动作添加火焰特效,可以让玩家感受到更加震撼的攻击视觉效果。

android imagepreview用法

android imagepreview用法

android imagepreview用法Android ImagePreview是一个用于在Android应用中实现图片预览功能的开源库,它能够帮助开发者实现图片的放大、缩小、滑动切换等操作,提升用户体验。

下面将介绍Android ImagePreview的用法,让开发者能够快速上手并在自己的应用中使用这个功能。

首先,开发者需要在项目的build.gradle文件中添加依赖,引入Android ImagePreview库。

可以通过在项目的build.gradle文件中的dependencies中添加以下代码来实现:implementation 'com.github.chrisbanes:PhotoView:2.3.0'implementation 'com.github.chrisbanes:PhotoView:2.3.0'接下来,在布局文件中添加用于显示图片的ImageView,并将其包裹在一个PhotoView中,代码示例如下:<com.github.chrisbanes.photoview.PhotoViewandroid:id="@+id/photo_view"android:layout_width="match_parent"android:layout_height="match_parent" />然后,在Java代码中,通过以下方式来实现图片的预览功能:PhotoView photoView = findViewById(R.id.photo_view);photoView.setImageResource(R.drawable.your_image);通过上述代码,开发者可以在应用中显示指定的图片,并实现放大、缩小、滑动切换等功能。

在实际使用中,开发者还可以根据自己的需求进行定制,比如设置图片的缩放比例、滑动的敏感度等。

android自定义ImageView实现缩放,回弹效果

android自定义ImageView实现缩放,回弹效果

android自定义ImageView实现缩放,回弹效果androidImageview缩放回弹话不多说上代码:MainActivity.javapublic class MainActivity extends Activity{private LinearLayout ll_viewArea;private youtParams parm;private ViewArea viewArea;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//去除titlerequestWindowFeature(Window.FEATURE_NO_TITLE);//去掉Activity上面的状态栏getWindow().setFlags(youtParams.FLAG_FULLSCREEN,youtParams. FLAG_FULLSCREEN);setContentView(yout.main);ll_viewArea = (LinearLayout) findViewById(R.id.ll_viewArea); parm = newyoutParams(youtParams.FILL_PARENT, youtParams.FILL_PARENT);viewArea = newViewArea(MainActivity.this,R.drawable.psu); //自定义布局控件,用来初始化并存放自定义imageViewll_viewArea.addView(viewArea,parm);}}这段代码中要注意的问题是去掉title和状态栏两句代码必须放到setContentView(yout.main);话的前面。

而且这两句话必须有,因为后面计算回弹距离是根据全屏计算的(我的i9000就是480x800),如果不去掉title 和状态栏,后面的回弹会有误差,总是回弹不到想要的位置。

Android实现图片反转、翻转、旋转、放大和缩小

Android实现图片反转、翻转、旋转、放大和缩小

Android实现图⽚反转、翻转、旋转、放⼤和缩⼩**********************************************************************android 实现图⽚的翻转**********************************************************************Resources res = this.getContext().getResources();img = BitmapFactory.decodeResource(res, R.drawable.aa);Matrix matrix = new Matrix();matrix.postRotate(180); /*翻转180度*/int width = img.getWidth();int height = img.getHeight();img_a = Bitmap.createBitmap(img, 0, 0, width, height, matrix, true);然后可以直接把img_a draw到画布上,canvas.drawBitmap(img_a, 10, 10, p);Matrix 是⼀个处理翻转、缩放等图像效果的重要类,Matrix.postScale 可设置缩放⽐例,默认为1**********************************************************************android 实现图⽚的旋转**********************************************************************public class ex04_22 extends Activity{private ImageView mImageView;private Button btn1,btn2;private TextView mTextView;private AbsoluteLayout layout1;private int ScaleTimes=1,ScaleAngle=1;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);mImageView=(ImageView)findViewById(R.id.myImageView);final Bitmap bmp=BitmapFactory.decodeResource(this.getResources(),R.drawable.ex04_22_1);final int widthOrig=bmp.getWidth();final int heightOrig=bmp.getHeight();mImageView.setImageBitmap(bmp);btn1=(Button)findViewById(R.id.myButton1);btn1.setOnClickListener(new OnClickListener(){public void onClick(View v){ScaleAngle--;if(ScaleAngle<-60){ScaleAngle=-60;}int newWidth=widthOrig*ScaleTimes;int newHeight=heightOrig*ScaleTimes;float scaleWidth=((float)newWidth)/widthOrig;float scaleHeight=((float)newHeight)/heightOrig;Matrix matrix=new Matrix();matrix.postScale(scaleWidth, scaleHeight);matrix.setRotate(5*ScaleAngle);Bitmap resizeBitmap=Bitmap.createBitmap(bmp, 0, 0, widthOrig, heightOrig, matrix, true);BitmapDrawable myNewBitmapDrawable=new BitmapDrawable(resizeBitmap);mImageView.setImageDrawable(myNewBitmapDrawable);}});btn2=(Button)findViewById(R.id.myButton2);btn2.setOnClickListener(new OnClickListener(){public void onClick(View v){ScaleAngle++;if(ScaleAngle>60){ScaleAngle=60;}int newWidth=widthOrig*ScaleTimes;int newHeight=heightOrig*ScaleTimes;float scaleWidth=((float)newWidth)/widthOrig;float scaleHeight=((float)newHeight)/heightOrig;Matrix matrix=new Matrix();matrix.postScale(scaleWidth, scaleHeight);matrix.setRotate(5*ScaleAngle);Bitmap resizeBitmap=Bitmap.createBitmap(bmp, 0, 0, widthOrig, heightOrig, matrix, true);BitmapDrawable myNewBitmapDrawable=new BitmapDrawable(resizeBitmap);mImageView.setImageDrawable(myNewBitmapDrawable);}});}**********************************************************************实现画⾯淡⼊淡出效果可以⽤:setAlpha(alpha);alpha从255,逐渐递减!**********************************************************************如何实现屏幕的滚动效果,这⾥有两个关键点,⼀个是实现OnGestureListener,以便在触摸事件发⽣的时候,被回调。

android photoview原理

android photoview原理

android photoview原理一、概述Android的PhotoView是Android中一个非常实用的库,它提供了对图像的缩放和滚动功能。

在Android应用开发中,我们经常需要展示大量的图片,并且允许用户进行缩放和滚动查看。

然而,Android原生ImageView控件并不支持这些功能。

为了实现这些功能,开发者需要自己编写大量的代码。

因此,Android PhotoView库的出现大大简化了开发者的开发工作。

二、Photoview的核心特性1. 缩放功能:用户可以自由地缩放图片,以便更仔细地查看图片的细节。

2. 滚动功能:如果图片超出了屏幕大小,用户可以滚动屏幕来查看图片的其他部分。

3. 触摸事件处理:PhotoView使用触摸事件来处理用户的操作,如放大、缩小和滚动等。

4. 自定义属性:开发者可以通过自定义属性来自定义PhotoView的外观和行为。

5. 支持不同显示模式:包括适应屏幕大小、固定比例和填充屏幕等模式。

三、工作原理详解1. 触摸事件处理PhotoView通过触摸事件来处理用户的操作。

当用户触摸屏幕时,它会根据触摸的位置和动作来判断用户的意图。

例如,如果用户在屏幕上拖动,PhotoView会计算拖动的距离和方向,并相应地滚动图片。

如果用户用两根手指在屏幕上分开或靠近,PhotoView会判断为缩放操作,并调整图片的大小。

2. 图像变换为了实现缩放和滚动功能,PhotoView需要对图像进行变换。

它使用矩阵和变换算法来对图像进行缩放和移动。

当用户缩放图像时,PhotoView会创建一个新的矩阵,并使用这个矩阵来计算新的图像位置和大小。

当用户滚动图像时,PhotoView会计算滚动的距离和方向,并相应地移动图像。

3. 渲染图像在显示图像时,PhotoView使用Android的画布(Canvas)和画笔(Paint)类来绘制图像。

它首先将图像加载到内存中,然后创建一个画布和画笔对象。

imageview使用方法

imageview使用方法

imageview使用方法1.在xml布局文件中添加ImageView控件:xml<ImageViewandroid:id="@+id/image_view"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/image"></ImageView>其中,android:src="@drawable/image" 指定了ImageView控件的图片资源。

2.在java代码中获取ImageView控件对象并设置相关属性:javaImageView imageView = (ImageView) findViewById(R.id.image_view); imageView.setImageResource(R.drawable.image); 设置图片资源imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 设置图片缩放方式其中,imageView.setImageResource(R.drawable.image)设置ImageView控件的图片资源,imageView.setScaleType(ImageView.ScaleType.CENTER_CROP)设置图片的缩放方式。

3.其他ImageView控件常用属性:xml<ImageViewandroid:id="@+id/image_view"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/image"android:scaleType="centerCrop" 设置图片缩放方式android:adjustViewBounds="true" 设置是否调整ImageView控件的边界来适应图片大小android:cropToPadding="true" 如果设置为true,则ImageView控件为了适应图片大小而裁剪周围的padding而不是拉伸图片android:alpha="0.8" 设置控件的透明度,范围从0(完全透明)到1(完全不透明)android:rotation="90" 设置控件的旋转角度,单位是度android:background="#000000" 设置控件的背景色android:padding="10dp" 设置控件周围的padding的大小/>以上是ImageView控件的基本使用方法和相关属性,根据需求可以进行适当的配置和调整。

Android三种常见的图片压缩方式

Android三种常见的图片压缩方式

Android三种常见的图⽚压缩⽅式⽬录1、质量压缩2、按⽐例压缩(尺⼨压缩、采样率压缩)3、鲁班压缩(推荐)下⾯就为⼤家带来3种⽐较常见的压缩⽅式先给出⼀组数据原图:width:2976; height:2976原图实际:--->byte:2299820 Mb:2.19328质量压缩 size--->:byte:1599831 kb:1562.33496按⽐例压缩 size--->:byte:191707 kb:187.21387鲁班压缩 size--->:byte:143792 kb:140.42188压缩效果:鲁班压缩 > 按⽐例压缩 > 质量压缩1、质量压缩public void getBitmap(String imgPath, String outPath) {BitmapFactory.Options newOpts = new BitmapFactory.Options();newOpts.inJustDecodeBounds = false;newOpts.inPurgeable = true;newOpts.inInputShareable = true;// Do not compressnewOpts.inSampleSize = 1;newOpts.inPreferredConfig = Config.RGB_565;storeImage(bitmap, outPath); //保存图⽚}注意质量压缩不会减少图⽚的像素,它是在保持像素的前提下改变图⽚的位深及透明度等,来达到压缩图⽚的⽬的,这也是为什么该⽅法叫质量压缩⽅法。

所以这种⽅法,很可能不会减少图⽚的⼤⼩如果是press(CompressFormat.PNG, quality, baos);这样的png格式,quality就没有作⽤了,bytes.length不会变化,因为png图⽚是⽆损的,不能进⾏压缩保存图⽚/*** 把bitmap转化成图⽚存储在本地** @param bitmap* @param outPath 本地的存储路径* @throws FileNotFoundException*/public static boolean storeImage(Bitmap bitmap, String outPath) throws FileNotFoundException {FileOutputStream os = new FileOutputStream(outPath);boolean compressResult = press(pressFormat.JPEG, 100, os);return compressResult;}2、按⽐例压缩(尺⼨压缩、采样率压缩)/*** 按⽐例压缩** @param path 原图⽚路径* @param targetW 压缩后宽度* @param targetH 压缩后⾼度* @return 压缩后的图⽚的保存路径*/public static String compressScale(String path,, String outPath, int targetW, int targetH) throws FileNotFoundException {// 获取optionBitmapFactory.Options options = new BitmapFactory.Options();// inJustDecodeBounds设置为true,这样使⽤该option decode出来的Bitmap是null,// 只是把长宽存放到option中options.inJustDecodeBounds = true;// 此时bitmap为nullBitmap bitmap = BitmapFactory.decodeFile(path, options);int inSampleSize = 1; // 1是不缩放// 计算宽⾼缩放⽐例int inSampleSizeW = options.outWidth / targetW;int inSampleSizeH = options.outHeight / targetH;// 最终取⼤的那个为缩放⽐例,这样才能适配,例如宽缩放3倍才能适配屏幕,⽽// ⾼不缩放就可以,那样的话如果按⾼缩放,宽在屏幕内就显⽰不下了if (inSampleSizeW > inSampleSizeH) {inSampleSize = inSampleSizeW;} else {inSampleSize = inSampleSizeH;}// ⼀定要记得将inJustDecodeBounds设为false,否则Bitmap为nulloptions.inJustDecodeBounds = false;// 设置缩放⽐例(采样率)options.inSampleSize = inSampleSize;bitmap = BitmapFactory.decodeFile(path, options);boolean isSuccess = storeImage(bitmap, outPath);if (isSuccess) {return outPath;}return "";}这种⽅法是设置图⽚的采样率,降低图⽚像素,通过缩放图⽚像素来减少图⽚⼤⼩。

android zoomimageview 用法

android zoomimageview 用法

android zoomimageview 用法`ZoomImageView` 是一个用于 Android 的自定义视图,它提供了图片的缩放和拖动功能。

以下是如何在 Android 应用中使用 `ZoomImageView` 的基本步骤:1. 添加依赖:首先,确保你的项目中已经添加了 `ZoomImageView` 的依赖。

通常,这需要在你的 `build.gradle` 文件中添加相应的依赖。

2. 在布局文件中添加 `ZoomImageView`:在你的布局 XML 文件中,添加 `ZoomImageView` 视图。

例如:```xml<com.yourpackage.ZoomImageViewandroid:id="@+id/zoomImageView"android:layout_width="match_parent"android:layout_height="match_parent"android:src="@drawable/your_image" />```这里 `yourpackage` 需要替换为实际的包名。

3. 配置 `ZoomImageView` 属性:在你的 Java 或 Kotlin 代码中,配置 `ZoomImageView` 的属性。

例如,设置最大和最小缩放比例、允许拖动等。

4. 处理用户交互:如果你需要处理用户对图片的缩放、拖动等交互,你可以重写`ZoomImageView` 的方法或者为其添加触摸监听器。

5. 调用方法来控制图片的缩放和位置:使用 `ZoomImageView` 提供的方法来控制图片的缩放和位置。

例如,使用`setImageBitmap` 设置图片,使用 `zoomTo` 方法来缩放图片等。

6. 处理生命周期:确保在适当的时候释放资源,特别是在活动生命周期的结束时。

Android中imageview.ScaleType使用方法详细介绍

Android中imageview.ScaleType使用方法详细介绍

Android中imageview.ScaleType使⽤⽅法详细介绍Android中imageview.ScaleType使⽤⽅法详细介绍ScaleType属性⽤以表⽰显⽰图⽚的⽅式,共有8种取值: ScaleType.CENTER:图⽚⼤⼩为原始⼤⼩,如果图⽚⼤⼩⼤于ImageView控件,则截取图⽚中间部分,若⼩于,则直接将图⽚居中显⽰。

ScaleType.CENTER_CROP:将图⽚等⽐例缩放,让图像的短边与ImageView的边长度相同,即不能留有空⽩,缩放后截取中间部分进⾏显⽰。

ScaleType.CENTER_INSIDE:将图⽚⼤⼩⼤于ImageView的图⽚进⾏等⽐例缩⼩,直到整幅图能够居中显⽰在ImageView中,⼩于ImageView的图⽚不变,直接居中显⽰。

ScaleType.FIT_CENTER:ImageView的默认状态,⼤图等⽐例缩⼩,使整幅图能够居中显⽰在ImageView中,⼩图等⽐例放⼤,同样要整体居中显⽰在ImageView中。

ScaleType.FIT_END:缩放⽅式同FIT_CENTER,只是将图⽚显⽰在右⽅或下⽅,⽽不是居中。

ScaleType.FIT_START:缩放⽅式同FIT_CENTER,只是将图⽚显⽰在左⽅或上⽅,⽽不是居中。

ScaleType.FIT_XY:将图⽚⾮等⽐例缩放到⼤⼩与ImageView相同。

ScaleType.MATRIX:是根据⼀个3x3的矩阵对其中图⽚进⾏缩放代码设置⽤法:imageView = new ImageView(mContext);imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);XML布局⽂件设置⽤法:android:scaleType="centerCrop".感谢阅读,希望能帮助到⼤家,谢谢⼤家对本站的⽀持!。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

方法1:按固定比例进行缩放
在开发图片浏览器等软件是,很多时候要显示图片的缩略图,而一般情况下,我们要将图片按照固定大小取缩略图,一般取缩略图的方法是使用BitmapFactory的decodeFile方法,然后通过传递进去BitmapFactory.Option类型的参数进行取缩略图,在Option中,属性值inSampleSize表示缩略图大小为原始图片大小的几分之一,即如果这个值为2,则取出的缩略图的宽和高都是原始图片的1/2,图片大小就为原始大小的1/4。

然而,如果我们想取固定大小的缩略图就比较困难了,比如,我们想将不同大小的图片去出来的缩略图高度都为200px,而且要保证图片不失真,那怎么办?我们总不能将原始图片加载到内存中再进行缩放处理吧,要知道在移动开发中,内存是相当宝贵的,而且一张100K的图片,加载完所占用的内存何止100K?
经过研究,发现,Options中有个属性inJustDecodeBounds,研究了一下,终于明白是什么意思了,SDK中的E文是这么说的
If set to true, the decoder will return null (no bitmap), but the out... fields will still be set, allowing the caller to query the bitmap without having to allocate the memory for its pixels.
意思就是说如果该值设为true那么将不返回实际的bitmap不给其分配内存空间而里面只包括一些解码边界信息即图片大小信息,那么相应的方法也就出来了,通过设置inJustDecodeBounds为true,获取到outHeight(图片原始高度)和outWidth(图片的原始宽度),然后计算一个inSampleSize(缩放值),然后就可以取图片了,这里要注意的是,inSampleSize可能小于0,必须做判断。

也就是说先将Options的属性inJustDecodeBounds设为true,先获取图片的基本大小信息数据(信息没有保存在bitmap里面,而是保存在options里面),通过options.outHeight和options. outWidth获取的大小信息以及自己想要到得图片大小计算出来缩放比例inSampleSize,然后紧接着将inJustDecodeBounds设为false,就可以根据已经得到的缩放比例得到自己想要的图片缩放图了。

具体代码如下:
FrameLayout fr=(FrameLayout)findViewById(R.id.FrameLayout01);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/test.jpg", options); //此时返回bm为空
options.inJustDecodeBounds = false;
//缩放比。

由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
int be = (int)(options.outHeight / (float)200);
if (be <= 0)
be = 1;
options.inSampleSize = be;
//重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
bitmap=BitmapFactory.decodeFile("/sdcard/test.jpg",options);
int w = bitmap.getWidth();
int h = bitmap.getHeight();
System.out.println(w+" "+h);
ImageView iv=new ImageView(this);
iv.setImageBitmap(bitmap);
这样我们就可以读取较大的图片而不会内存溢出了。

如果你想把压缩后的图片保存在Sdcard 上的话就很简单了:
File file=new File("/sdcard/feng.png");
try {
FileOutputStream out=new FileOutputStream(file);
if(press(pressFormat.PNG, 100, out)){
out.flush();
out.close();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ok,这样就把图片保存在/sdcard/feng.png这个文件里面了,呵呵。

方法2:按长宽各自比例进行缩放
但是这里的缩放保存是按长宽比例的,下边也可以按固定大小缩放哦:
int bmpWidth = bitmap.getWidth();
int bmpHeight = bitmap.getHeight();
//缩放图片的尺寸
float scaleWidth = (float) sWidth / bmpWidth; //按固定大小缩放sWidth 写多大就多大
float scaleHeight = (float) sHeight / bmpHeight; //
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);//产生缩放后的Bitmap对象
Bitmap resizeBitmap = Bitmap.createBitmap(bitmap, 0, 0, bmpWidth, bmpHeight, matrix, false);
bitmap.recycle();
Bitmap resizeBitmap = bitmap;
//Bitmap to byte[]
byte[] photoData = bitmap2Bytes(resizeBitmap);
//save file
String fileName = "/sdcard/test.jpg";
FileUtil.writeToFile(fileName, photoData);。

相关文档
最新文档