- 浏览: 245790 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
你的样子越来越美:
楼主是来炫耀的。
java图片处理解决方案 -
di1984HIT:
关注一下。
hypertable安装 -
di1984HIT:
katta好久不更新了。
Katta源码分析(1)--显示节点 -
tracyitbird:
谢谢博主,很好说的很明白。不过一般bin的环境变量已经配置好了 ...
解决Hadoop报Name node is in safe mode 错误 -
凌寒_微雨:
总结的很好
android 笔记——listView应用
Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等等.
废话少说了,直接讲解今天的实例,本例主要是先获取壁纸(getWallpaper()),然后对当前壁纸的一些特效处理.大家按步骤一步一步来:
第一步:新建一个Android工程命名为ImageDemo,工程结构如下:
第二步:新建一个.java文件,命名为ImageUtil.java,在里面定义一些图片处理方法,代码如下:
第三步:修改main.xml布局文件,主要放了两个ImageView控件,代码如下:
第四步:修改主核心程序,ImageDemo.java,代码如下:
第五步:运行上述工程,查看效果如下:
OK大功告成了!!
废话少说了,直接讲解今天的实例,本例主要是先获取壁纸(getWallpaper()),然后对当前壁纸的一些特效处理.大家按步骤一步一步来:
第一步:新建一个Android工程命名为ImageDemo,工程结构如下:
第二步:新建一个.java文件,命名为ImageUtil.java,在里面定义一些图片处理方法,代码如下:
package com.android.tutor; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.LinearGradient; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Bitmap.Config; import android.graphics.PorterDuff.Mode; import android.graphics.Shader.TileMode; import android.graphics.drawable.Drawable; public class ImageUtil { //放大缩小图片 public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){ int width = bitmap.getWidth(); int height = bitmap.getHeight(); Matrix matrix = new Matrix(); float scaleWidht = ((float)w / width); float scaleHeight = ((float)h / height); matrix.postScale(scaleWidht, scaleHeight); Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); return newbmp; } //将Drawable转化为Bitmap public static Bitmap drawableToBitmap(Drawable drawable){ int width = drawable.getIntrinsicWidth(); int height = drawable.getIntrinsicHeight(); Bitmap bitmap = Bitmap.createBitmap(width, height, drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0,0,width,height); drawable.draw(canvas); return bitmap; } //获得圆角图片的方法 public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx){ Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap .getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return output; } //获得带倒影的图片方法 public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){ final int reflectionGap = 4; int width = bitmap.getWidth(); int height = bitmap.getHeight(); Matrix matrix = new Matrix(); matrix.preScale(1, -1); Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, height/2, width, height/2, matrix, false); Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height/2), Config.ARGB_8888); Canvas canvas = new Canvas(bitmapWithReflection); canvas.drawBitmap(bitmap, 0, 0, null); Paint deafalutPaint = new Paint(); canvas.drawRect(0, height,width,height + reflectionGap, deafalutPaint); canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null); Paint paint = new Paint(); LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0, bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP); paint.setShader(shader); // Set the Transfer mode to be porter duff and destination in paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); // Draw a rectangle using the paint with our linear gradient canvas.drawRect(0, height, width, bitmapWithReflection.getHeight() + reflectionGap, paint); return bitmapWithReflection; } }
第三步:修改main.xml布局文件,主要放了两个ImageView控件,代码如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/image01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10px" /> <ImageView android:id="@+id/image02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10px" /> </LinearLayout>
第四步:修改主核心程序,ImageDemo.java,代码如下:
package com.android.tutor; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.widget.ImageView; public class Imagedemo extends Activity { private ImageView mImageView01,mImageView02; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setupViews(); } private void setupViews(){ mImageView01 = (ImageView)findViewById(R.id.image01); mImageView02 = (ImageView)findViewById(R.id.image02); //获取壁纸返回值是Drawable Drawable drawable = getWallpaper(); //将Drawable转化为Bitmap Bitmap bitmap = ImageUtil.drawableToBitmap(drawable); //缩放图片 Bitmap zoomBitmap = ImageUtil.zoomBitmap(bitmap, 100, 100); //获取圆角图片 Bitmap roundBitmap = ImageUtil.getRoundedCornerBitmap(zoomBitmap, 10.0f); //获取倒影图片 Bitmap reflectBitmap = ImageUtil.createReflectionImageWithOrigin(zoomBitmap); //这里可以让Bitmap再转化为Drawable // Drawable roundDrawable = new BitmapDrawable(roundBitmap); // Drawable reflectDrawable = new BitmapDrawable(reflectBitmap); // mImageView01.setBackgroundDrawable(roundDrawable); // mImageView02.setBackgroundDrawable(reflectDrawable); mImageView01.setImageBitmap(roundBitmap); mImageView02.setImageBitmap(reflectBitmap); } }
第五步:运行上述工程,查看效果如下:
OK大功告成了!!
发表评论
-
android -- 笔记
2011-08-26 14:32 0System.out.println(tm.getDevice ... -
android 笔记 --- android:paddingLeft与android:layout_marginLeft的区别
2011-05-31 15:47 3423当按钮分别设置以上两个属性时,得到的效果是不一样的。 and ... -
android 笔记 --- ImageView的属性android:scaleType
2011-05-27 18:40 6442ImageView的属性android:scaleType,即 ... -
android 笔记 --- 位图和矢量图区别
2011-05-27 11:29 5050位图和矢量图是计算机 ... -
android 笔记 --- 适配不同分辨率的Android手机
2011-05-27 11:25 3214一:不同的layout Android手机屏幕大小不一,有4 ... -
android 笔记 --- Android系统中SD卡各文件夹功能详解
2011-05-24 14:46 2738对于初次使用Android系统 ... -
android 笔记 --- Android的PackageManager和ActivityManager的功能简介
2011-05-24 14:40 1896Android系统为应用管理功能提供了大量的API。根据功能的 ... -
android 笔记 --- InputFilter实现EditText文本输入过滤器
2011-05-23 16:19 10221EditText是Android的文本输入框控件,这地球人应该 ... -
android 笔记 --- 让Android的输入框与文本框带滚动条ScrollView
2011-05-23 16:18 3668我们都知道EditText与TextView是Android的 ... -
android 笔记 --- Android自动判断输入是电话,网址或者Email的方法—-Linkify的应用
2011-05-23 16:16 3945本节要讲的是,当我们在一个EditText输入电话或者网址还是 ... -
android 笔记 --- Android SimpleAdapter
2011-05-23 16:12 2004列表(ListView)、表格(GridView),这在手机应 ... -
android 笔记 --- Android安全机制之设备管理
2011-05-23 16:08 1938Andoid安全机制包括两个层次:系统层和应用层。应用层的安全 ... -
android 笔记 --- Android-图片透明度处理代码
2011-05-23 16:07 2313/** * 图片透明度处理 * * @pa ... -
android 笔记 --- Android大TXT文本文档读取
2011-05-23 16:03 8057由于现在TXT文本很多,特别是好多小说也是以这个文件格式出现, ... -
android 笔记 --- 自定义Android主题风格theme.xml方法
2011-05-23 15:51 3061在Android中可以通过自定义主题风格方式来实现个性化以及复 ... -
android 笔记 --- Android中Menu应用
2011-05-23 15:48 1218Android menu是Android开发中经常使用的,下面 ... -
android 笔记 --- Android中Handler,Looper,HandlerThread
2011-05-23 15:46 1907Handler提供了一种消息机制用于线程间的通信。 默认情况下 ... -
android 笔记 --- Android Shadow 阴影制作
2011-05-23 15:41 5706在Android View 中, 要制作阴影, 可以利用 P ... -
android 笔记 --- 分辨率大全
2011-05-23 15:40 1517对于Android游戏开发我们 ... -
android 笔记 --- Android Bitmap 建立或取得的方法
2011-05-23 15:12 2199Android 要建立或取得Bitmap 的方式, 目前, ...
相关推荐
新版Android开发教程&笔记--基础入门一 新版Android开发教程&笔记--基础入门二 新版Android开发教程&笔记三--环境搭建与解析 新版Android开发教程&笔记四--Dalvik ADB 新版Android开发教程+笔记五--模拟器、应用1、2...
1. AIDL是Android中用于跨进程通信的关键技术,它允许不同进程间的组件互相调用方法,就像是在同一个进程中一样。 2. AIDL文件定义了一个接口,包含了一系列方法和参数类型。Android编译器会根据AIDL生成相应的Java...
新版Android开发教程&笔记--基础入门一.pdf 新版Android开发教程&笔记--基础入门二.pdf 新版Android开发教程&笔记三--环境搭建与解析.pdf 新版Android开发教程&笔记四--Dalvik ADB.pdf 新版Android开发教程+笔记五--...
在笔记App中,RxAndroid可以帮助开发者更方便地处理异步操作,例如保存或同步笔记,同时确保代码的可读性和可维护性。它允许将复杂的事件序列转换为简单的数据流,简化了多线程编程和事件处理。 3. **MVP架构模式**...
4、Android04--Android服务 5、Android05--Android服务通信 6、Android06--Android广播接收器 7、Android07--Android日志系统 8、Android08--Android权限系统 用户界面 9、Android09--Fragment初探 10、Android09--...
LinearLayout是Android中最常见的布局之一,它允许子视图按照垂直或水平方向进行排列。在例子中,`orientation="vertical"`表示子视图将自上而下排列。`android:layout_width="fill_parent"`和`android:layout_...
【Android学习笔记--Binder】 Binder是Android系统中的核心组件,它是Android系统实现进程间通信(IPC,Inter-Process Communication)的主要方式。Binder机制允许不同进程的组件之间进行数据交换和功能调用,就像...
首先,让我们来探讨Android中的Dialog。Dialog是一种在主界面之上弹出的窗口,用于显示临时信息或者进行用户交互。常见的Dialog类型有AlertDialog、ProgressDialog和DatePickerDialog等。在创建Dialog时,你需要先...
新版Android开发教程及笔记-完整版 比较不错的入门教程
Android学习笔记 > 十年生死两茫茫,不思量,自难忘,华年短暂,陈辞岁月悠悠伤, > 满腔热血已芜荒,展未来,后生强,战战兢兢,如履薄冰心彷徨, > 青丝化雪、鬓角成霜,已是英雄迟暮,人生怎慷慨激昂? 目录 ...
- 对于教育领域,这也是一种成本效益高的解决方案,可以让学生在熟悉的桌面环境中学习和使用Android应用程序。 ### ISO镜像文件 - **定义**:ISO镜像是光盘内容的数字副本,通常用于保存文件系统结构和所有原始...
android学习笔记-clip.pdf
这篇“Android学习笔记--Gson笔记”将深入探讨如何利用Gson来处理JSON数据,提升Android应用的数据解析效率。 一、Gson简介 Gson库能够将Java对象转换成对应的JSON字符串,反之亦然,这使得在Android应用中存储、...
口袋笔记-- 一个简单的记事本app,具有多色彩主题,自带日历视图,记事可以是列表显示也可以是网格显示,提醒功能,隐私保护功能等。项目地址:https://github.com/channguyen/pocket-note-android 效果图:
新版Android开发教程&笔记--基础入门一 新版Android开发教程&笔记--基础入门二 新版Android开发教程&笔记三--环境搭建与解析 新版Android开发教程&笔记四--Dalvik ADB 新版Android开发教程+笔记五--模拟器、应用1、2...
《Android群英传笔记》是一本深度探讨Android开发技术的宝贵资料,由知名开发者刘某人倾力编写。这本书详尽地涵盖了Android应用开发的各个方面,旨在帮助读者从基础到高级全面掌握Android编程技能。笔记内容丰富,...
Android学习笔记-SQLite介绍-以及使用Sqlite-进行数据库的创建-完成数据.pdf
冰河整理的全网首个开源的以实战案例为背景的渗透实战笔记,全书共442页,共计37万字(不计空格)。整本书的内容涵盖:Kali基础、渗透工具、木马制作、钓鱼链接生成、爆破密码、内存溢出攻击、web渗透、数据提权、...
这篇学习笔记将引导新手入门,通过创建第一个简单的案例来了解Android Studio的基本操作。 首先,让我们了解一下Android Studio的核心功能。它基于IntelliJ IDEA,具备代码自动补全、重构、调试等强大的开发特性。...