热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android中图像特效处理实例教程

Android中有很多图片特效处理技巧,比如圆角、倒影,今天为大家一个实例,本例主要是先获取壁纸(getWallpaper()),然后对当前壁纸的一

Android中有很多图片特效处理技巧,比如圆角、倒影,今天为大家一个实例,本例主要是先获取壁纸(getWallpaper()),然后对当前壁纸的一些特效处理。

第一步:新建一个Android工程命名为ImageDemo,工程结构如下:

第二步:新建一个.java文件,命名为ImageUtil.java,在里面定义一些图片处理方法,代码如下:

  1. package com.android.tutor;  
  2. import android.graphics.Bitmap;  
  3. import android.graphics.Canvas;  
  4. import android.graphics.LinearGradient;  
  5. import android.graphics.Matrix;  
  6. import android.graphics.Paint;  
  7. import android.graphics.PixelFormat;  
  8. import android.graphics.PorterDuffXfermode;  
  9. import android.graphics.Rect;  
  10. import android.graphics.RectF;  
  11. import android.graphics.Bitmap.Config;  
  12. import android.graphics.PorterDuff.Mode;  
  13. import android.graphics.Shader.TileMode;  
  14. import android.graphics.drawable.Drawable;  
  15. public class ImageUtil { 
  16.  
  17. //放大缩小图片  
  18. public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){  
  19. int width = bitmap.getWidth();  
  20. int height = bitmap.getHeight();  
  21. Matrix matrix = new Matrix();  
  22. float scaleWidht = ((float)w / width);  
  23. float scaleHeight = ((float)h / height);  
  24. matrix.postScale(scaleWidht, scaleHeight);  
  25. Bitmap newbmp = Bitmap.createBitmap(bitmap, 00, width, height, matrix, true);  
  26. return newbmp;  
  27. }  
  28. //将Drawable转化为Bitmap  
  29. public static Bitmap drawableToBitmap(Drawable drawable){  
  30. int width = drawable.getIntrinsicWidth();  
  31. int height = drawable.getIntrinsicHeight();  
  32. Bitmap bitmap = Bitmap.createBitmap(width, height,  
  33. drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888  
  34. : Bitmap.Config.RGB_565);  
  35. Canvas canvas = new Canvas(bitmap);  
  36. drawable.setBounds(0,0,width,height);  
  37. drawable.draw(canvas);  
  38. return bitmap; 
  39.  
  40.  
  41. //获得圆角图片的方法  
  42. public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx){ 
  43.  
  44. Bitmapoutput = Bitmap.createBitmap(bitmap.getWidth(), bitmap  
  45. .getHeight(), Config.ARGB_8888);  
  46. Canvas canvas = new Canvas(output); 
  47.  
  48. final intcolor = 0xff424242;  
  49. final Paint paint = new Paint();  
  50. final Rect rect = new Rect(00, bitmap.getWidth(), bitmap.getHeight());  
  51. final RectF rectF = new RectF(rect); 
  52.  
  53. paint.setAntiAlias(true);  
  54. canvas.drawARGB(0000);  
  55. paint.setColor(color);  
  56. canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 
  57.  
  58. paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));  
  59. canvas.drawBitmap(bitmap, rect, rect, paint); 
  60.  
  61. returnoutput;  
  62. }  
  63. //获得带倒影的图片方法  
  64. public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){  
  65. final int reflectionGap = 4;  
  66. int width = bitmap.getWidth();  
  67. int height = bitmap.getHeight(); 
  68.  
  69. Matrixmatrix = new Matrix();  
  70. matrix.preScale(1, -1); 
  71.  
  72. BitmapreflectionImage = Bitmap.createBitmap(bitmap,  
  73. 0, height/2, width, height/2, matrix, false); 
  74.  
  75. BitmapbitmapWithReflection = Bitmap.createBitmap(width, (height + height/2),Config.ARGB_8888); 
  76.  
  77. Canvascanvas = new Canvas(bitmapWithReflection);  
  78. canvas.drawBitmap(bitmap, 00null);  
  79. Paint deafalutPaint = new Paint();  
  80. canvas.drawRect(0, height,width,height + reflectionGap,  
  81. deafalutPaint); 
  82.  
  83. canvas.drawBitmap(reflectionImage,0, height + reflectionGap, null); 
  84.  
  85. Paint paint= new Paint();  
  86. LinearGradient shader = new LinearGradient(0,  
  87. bitmap.getHeight(), 0, bitmapWithReflection.getHeight()  
  88. + reflectionGap, 0x70ffffff0x00ffffff, TileMode.CLAMP);  
  89. paint.setShader(shader);  
  90. // Set the Transfer mode to be porter duff and destination in  
  91. paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));  
  92. // Draw a rectangle using the paint with our linear gradient  
  93. canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()  
  94. + reflectionGap, paint); 
  95.  
  96. returnbitmapWithReflection;  
  97.  
  98. }  

第三步:修改main.xml布局文件,主要放了两个ImageView控件,代码如下:

  1. xmlversionxmlversion="1.0" encoding="utf-8"?>  
  2. <LinearLayoutxmlns:androidLinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"  
  3. android:orientation="vertical"  
  4. android:layout_width="fill_parent"  
  5. android:layout_height="fill_parent"  
  6. >  
  7. <ImageView  
  8. android:id="@+id/image01"  
  9. android:layout_width="wrap_content"  
  10. android:layout_height="wrap_content"  
  11. android:padding="10px"  
  12. />  
  13. <ImageView  
  14. android:id="@+id/image02"  
  15. android:layout_width="wrap_content"  
  16. android:layout_height="wrap_content"  
  17. android:padding="10px"  
  18. />  
  19. LinearLayout>  

第四步:修改主核心程序,ImageDemo.java,代码如下:

  1. package com.android.tutor;  
  2. import android.app.Activity;  
  3. import android.graphics.Bitmap;  
  4. import android.graphics.drawable.Drawable;  
  5. import android.os.Bundle;  
  6. import android.widget.ImageView;  
  7. public class Imagedemo extends Activity {  
  8. private ImageView mImageView01,mImageView02; 
  9.  
  10. public voidonCreate(Bundle savedInstanceState) {  
  11. super.onCreate(savedInstanceState);  
  12. setContentView(R.layout.main);  
  13. setupViews();  
  14.  
  15. private voidsetupViews(){  
  16. mImageView01 = (ImageView)findViewById(R.id.image01);  
  17. mImageView02 = (ImageView)findViewById(R.id.image02); 
  18.  
  19. //获取壁纸返回值是Drawable  
  20. Drawable drawable = getWallpaper();  
  21. //将Drawable转化为Bitmap  
  22. Bitmap bitmap = ImageUtil.drawableToBitmap(drawable);  
  23. //缩放图片  
  24. Bitmap zoomBitmap = ImageUtil.zoomBitmap(bitmap, 100100);  
  25. //获取圆角图片  
  26. Bitmap roundBitmap = ImageUtil.getRoundedCornerBitmap(zoomBitmap, 10.0f);  
  27. //获取倒影图片  
  28. Bitmap reflectBitmap = ImageUtil.createReflectionImageWithOrigin(zoomBitmap);  
  29. //这里可以让Bitmap再转化为Drawable  
  30. // Drawable roundDrawable = new BitmapDrawable(roundBitmap);  
  31. // Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);  
  32. // mImageView01.setBackgroundDrawable(roundDrawable);  
  33. // mImageView02.setBackgroundDrawable(reflectDrawable); 
  34.  
  35. mImageView01.setImageBitmap(roundBitmap);  
  36. mImageView02.setImageBitmap(reflectBitmap);  
  37.  
  38.  
  39. }  

第五步:运行上述工程,查看效果如下:


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 大连微软技术社区举办《.net core始于足下》活动,获得微软赛百味和易迪斯的赞助
    九月十五日,大连微软技术社区举办了《.net core始于足下》活动,共有51人报名参加,实际到场人数为43人,还有一位专程从北京赶来的同学。活动得到了微软赛百味和易迪斯的赞助,场地也由易迪斯提供。活动中大家积极交流,取得了非常成功的效果。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
author-avatar
爱吃橘子的金XiaRui
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有