Android高手进阶教程(二十二)之Android中几种图像特效处理的集锦汇总!!_Android

大家好,这一节给大家分享的是Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等等.

废话少说了,直接讲解今天的实例,本例主要是先获取壁纸(getWallpaper()),然后对当前壁纸的一些特效处理.大家按步骤一步一步来:

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

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

package com.android.tutor;
import androidgraphicsBitmap;
import androidgraphicsCanvas;
import androidgraphicsLinearGradient;
import androidgraphicsMatrix;
import androidgraphicsPaint;
import androidgraphicsPixelFormat;
import androidgraphicsPorterDuffXfermode;
import androidgraphicsRect;
import androidgraphicsRectF;
import androidgraphicsBitmapConfig;
import androidgraphicsPorterDuffMode;
import androidgraphicsShaderTileMode;
import androidgraphicsdrawableDrawable;
public class ImageUtil { 

  //放大缩小图片
  public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){
    int width = bitmapgetWidth();
    int height = bitmapgetHeight();
    Matrix matrix = new Matrix();
    float scaleWidht = ((float)w / width);
    float scaleHeight = ((float)h / height);
    matrixpostScale(scaleWidht, scaleHeight);
    Bitmap newbmp = BitmapcreateBitmap(bitmap, 0, 0, width, height, matrix, true);
    return newbmp;
  }
  //将Drawable转化为Bitmap
   public static Bitmap drawableToBitmap(Drawable drawable){
      int width = drawablegetIntrinsicWidth();
      int height = drawablegetIntrinsicHeight();
      Bitmap bitmap = BitmapcreateBitmap(width, height,
          drawablegetOpacity() != PixelFormatOPAQUE ? BitmapConfigARGB_8888
              : BitmapConfigRGB_565);
      Canvas canvas = new Canvas(bitmap);
      drawablesetBounds(0,0,width,height);
      drawabledraw(canvas);
      return bitmap; 

    } 

   //获得圆角图片的方法
  public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx){ 

    Bitmap output = BitmapcreateBitmap(bitmapgetWidth(), bitmap
        getHeight(), ConfigARGB_8888);
    Canvas canvas = new Canvas(output); 

    final int color = 0xff424242;
    final Paint paint = new Paint();
    final Rect rect = new Rect(0, 0, bitmapgetWidth(), bitmapgetHeight());
    final RectF rectF = new RectF(rect); 

    paintsetAntiAlias(true);
    canvasdrawARGB(0, 0, 0, 0);
    paintsetColor(color);
    canvasdrawRoundRect(rectF, roundPx, roundPx, paint); 

    paintsetXfermode(new PorterDuffXfermode(ModeSRC_IN));
    canvasdrawBitmap(bitmap, rect, rect, paint); 

    return output;
  }
  //获得带倒影的图片方法
  public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){
    final int reflectionGap = 4;
    int width = bitmapgetWidth();
    int height = bitmapgetHeight(); 

    Matrix matrix = new Matrix();
    matrixpreScale(1, -1); 

    Bitmap reflectionImage = BitmapcreateBitmap(bitmap,
        0, height/2, width, height/2, matrix, false); 

    Bitmap bitmapWithReflection = BitmapcreateBitmap(width, (height + height/2), ConfigARGB_8888); 

    Canvas canvas = new Canvas(bitmapWithReflection);
    canvasdrawBitmap(bitmap, 0, 0, null);
    Paint deafalutPaint = new Paint();
    canvasdrawRect(0, height,width,height + reflectionGap,
        deafalutPaint); 

    canvasdrawBitmap(reflectionImage, 0, height + reflectionGap, null); 

    Paint paint = new Paint();
    LinearGradient shader = new LinearGradient(0,
        bitmapgetHeight(), 0, bitmapWithReflectiongetHeight()
        + reflectionGap, 0x70ffffff, 0x00ffffff, TileModeCLAMP);
    paintsetShader(shader);
    // Set the Transfer mode to be porter duff and destination in
    paintsetXfermode(new PorterDuffXfermode(ModeDST_IN));
    // Draw a rectangle using the paint with our linear gradient
    canvasdrawRect(0, height, width, bitmapWithReflectiongetHeight()
        + reflectionGap, paint); 

    return bitmapWithReflection;
  } 

} 

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

<?xml version="0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemasandroidcom/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 comandroidtutor;
import androidappActivity;
import androidgraphicsBitmap;
import androidgraphicsdrawableDrawable;
import androidosBundle;
import androidwidgetImageView;
public class Imagedemo extends Activity {
  private ImageView mImageView01,mImageView02; 

  public void onCreate(Bundle savedInstanceState) {
    superonCreate(savedInstanceState);
    setContentView(Rlayoutmain);
    setupViews();
  } 

  private void setupViews(){
    mImageView01 = (ImageView)findViewById(Ridimage01);
    mImageView02 = (ImageView)findViewById(Ridimage02); 

    //获取壁纸返回值是Drawable
    Drawable drawable = getWallpaper();
    //将Drawable转化为Bitmap
    Bitmap bitmap = ImageUtildrawableToBitmap(drawable);
    //缩放图片
    Bitmap zoomBitmap = ImageUtilzoomBitmap(bitmap, 100, 100);
    //获取圆角图片
    Bitmap roundBitmap = ImageUtilgetRoundedCornerBitmap(zoomBitmap, 0f);
    //获取倒影图片
    Bitmap reflectBitmap = ImageUtilcreateReflectionImageWithOrigin(zoomBitmap);
    //这里可以让Bitmap再转化为Drawable
//   Drawable roundDrawable = new BitmapDrawable(roundBitmap);
//   Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);
//   mImageViewsetBackgroundDrawable(roundDrawable);
//   mImageViewsetBackgroundDrawable(reflectDrawable); 

    mImageViewsetImageBitmap(roundBitmap);
    mImageViewsetImageBitmap(reflectBitmap);
  } 

} 

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

OK大功告成了!!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
图像处理
qq飞车高手进阶区、qq飞车论坛高手进阶区、网页特效集锦、二元期权高手技巧集锦、android开发高手进阶,以便于您获取更多的相关知识。

时间: 2024-10-21 19:35:21

Android高手进阶教程(二十二)之Android中几种图像特效处理的集锦汇总!!_Android的相关文章

Android中几种图像特效处理的集锦!!!

大家好,这一节给大家分享的是Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等等. 废话少说了,直接讲解今天的实例,本例主要是先获取壁纸(getWallpaper()),然后对当前壁纸的一些特效处理.大家按步骤一步一步来: 第一步:新建一个Android工程命名为ImageDemo,工程结构如下:   第二步:新建一个.java文件,命名为ImageUtil.java,在里面定义一些图片处理方法,代

Android高手进阶教程(二十六)之---Android超仿Path菜单的功能实现!_Android

Hi~大家好,出来创业快3个月了,一切还不错,前一段时间用了业余时间搞了个问答类网站YQMA.想做中国的stackoverflow,哈哈,只是YY下,希望大家多多支持! 好了,今天给大家分享的是Path菜单的简单实现,可以支持自定义方向(左上,右上,右下,左下),并且可以自定义菜单的个数,难点就是菜单的摆放位置(动态设置margin),还有动画的实现,其实动画只是简单用了个TranslateAnimation,N个菜单一起移动的时候感觉很cool~ 这里也用到了自定义标签,这里不懂的童鞋可以看我

Android简明开发教程二十二:使用资源Resources

在前面的例子中,我们忽略了一个重要的原则,在代码和Layout中,直接使用了字符串常量,比如: <Button android:text="Pattern" android:id="@+id/btnPattern" android:layout_width="wrap_content" android:textColor="@color/black" android:checked="true" an

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十二)

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十二)重构 – 让代码插上翅膀自由飞翔 上一节,我将游戏地图模式进行了一次重大的变动,这在实际开发中意味着项目大规模重置,虽然表面上显得游刃有余,仅仅一个AllMove()方法的改变即实现了完美转型,这全得归功于前20节所搭建起的相对高度可扩展平台.但是,随着开发不断深入,我慢慢的感到些许的不安,因为代码上的日益松散与结构的渐渐稀疏如同Windows系统的磁盘碎片与日俱增,未来维护时的烦琐与痛心疾首已历历在目

ASP.NET 2.0数据教程之六十二:创建一个用户自定义的Database-Driven Site Map

返回"ASP.NET 2.0数据教程目录" ASP.NET 2.0数据教程之六十二:创建一个用户自定义的Database-Driven Site Map Provider 导言: ASP.NET 2.0的网站地图(site map)功能允许页面开发者在一些 持久介质(persistent medium),比如一个XML文件里,自己定义一个web程序的 site map.一旦定义了之后,我们可以通过System.Web命名空间的SiteMap class 类或某个Web导航控件,比如Si

Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 这一章很多,但是很有趣,也是这书的最后一章知识点了,我现在还在考虑要不要写这个拼图和2048的案例,在此之前,我们先来玩玩Android5.X的新特性吧!

Senparc.Weixin.MP SDK 微信公众平台开发教程(十二):OAuth2.0说明

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(十二):OAuth2.0说明 紧接上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明>,这里专讲OAuth2.0. 理解OAuth2.0 首先我们通过一张图片来了解一下OAuth2.0的运作模式: 从上图我们可以看到,整个过程进行了2次"握手",最终利用授权的AccessToken进行一系列的请求,相关的过程说明如下: A:由客户端向服务器发出验证请求,请求中

Windows 8风格应用开发入门 二十二 MessageDialog

MessageDialog概述 MessageDialog指的就是对话框. 对话框的命令栏中最多包含三个命令.如果我们指定任何命令,将会有一个默认命令添加到对话框中,目的是关闭对话框. 对话框弹出后界面中所有元素将在对话框下面显示,并且将会阻塞任何触摸事件直到用户进行响应对话框. 另外对话框应该尽量少用. 注意:Windows 8风格应用中取消了MessageBox对象,取而代之的是MessageDialog对象. MessageDialog常用属性和方法 MessageDialog类包含两类构

Bootstrap &lt;基础二十二&gt;超大屏幕(Jumbotron)

原文:Bootstrap <基础二十二>超大屏幕(Jumbotron) Bootstrap 支持的另一个特性,超大屏幕(Jumbotron).顾名思义该组件可以增加标题的大小,并为登陆页面内容添加更多的外边距(margin).使用超大屏幕(Jumbotron)的步骤如下: 创建一个带有 class .jumbotron. 的容器 <div>. 除了更大的 <h1>,字体粗细 font-weight 被减为 200px. 下面的实例演示了这点: <!DOCTYPE