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大功告成了!!

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

(0)

相关推荐

  • Android 图片特效处理的方法实例

    1. 图片放缩 复制代码 代码如下: // zoom 放缩  public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h) {      int width = bitmap.getWidth();      int height = bitmap.getHeight();      Matrix matrix = new Matrix(); float scaleWidth = w / (float) width;      floa

  • Android编程中图片特效处理方法小结

    本文实例总结了Android编程中图片特效处理方法.分享给大家供大家参考,具体如下: 这里介绍的Android图片处理方法包括: 转换 -  drawable To  bitmap 缩放 -  Zoom 圆角 -  Round Corner 倒影 -  Reflected bitmapPrcess  code: package com.learn.games; import android.graphics.Bitmap; import android.graphics.Canvas; impo

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

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

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

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

  • Python入门教程(二十二)Python的类和对象

    目录 Python 类/对象 创建类 创建对象 init() 函数 对象方法 self 参数 修改对象属性 删除对象属性 删除对象 pass 语句 Python 类/对象 Python 是一种面向对象的编程语言. Python 中的几乎所有东西都是对象,拥有属性和方法. 类(Class)类似对象构造函数,或者是用于创建对象的“蓝图”. 创建类 如需创建类,请使用 class 关键字: 实例 使用名为 x 的属性,创建一个名为 MyClass 的类: class MyClass: x = 5 运行

  • Android中几种图片特效的处理的实现方法

     Android中几种图片特效的处理 这里有放大缩小图片,获得圆角图片,获得带倒影图片的几种方法及实现代码, package com.android.tutor; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.LinearGradient; import android.graphics.Matrix; import android.graphics.Paint; i

  • SQLite教程(十二):锁和并发控制详解

    一.概述: 在SQLite中,锁和并发控制机制都是由pager_module模块负责处理的,如ACID(Atomic, Consistent, Isolated, and Durable).在含有数据修改的事务中,该模块将确保或者所有的数据修改全部提交,或者全部回滚.与此同时,该模块还提供了一些磁盘文件的内存Cache功能.     事实上,pager_module模块并不关心数据库存储的细节,如B-Tree.编码方式.索引等,它只是将其视为由统一大小(通常为1024字节)的数据块构成的单一文件

  • VBScript教程 第十二课VBScript页面的简单样例

    一个简单页面 使用 Microsoft? Internet Explorer 可以查看用以下 HTML 代码制作的页面.如果单击页面上的按钮,可看到 VBScript 的运行结果. <HTML><HEAD><TITLE>一个简单首页</TITLE><SCRIPT LANGUAGE="VBScript"><!--Sub Button1_&#111nClickMsgBox "Mirabile visu.&q

  • Lua教程(二十二):userdata

    在Lua中可以通过自定义类型的方式与C语言代码更高效.更灵活的交互.这里我们通过一个简单完整的示例来学习一下Lua中userdata的使用方式.需要说明的是,该示例完全来自于Programming in Lua.其功能是用C程序实现一个Lua的布尔数组,以提供程序的执行效率.见下面的代码和关键性注释. 复制代码 代码如下: #include <lua.hpp> #include <lauxlib.h> #include <lualib.h> #include <l

  • javascript asp教程第十二课---session对象

    Overview: The Session Object is how you track a single user across many pages. It has four (4) properties, two (2) collections, one (1) method, and two (2) events. Get Started: In this series of examples we will create a password system. We will use

  • Lua教程(十二):面向对象编程

    Lua中的table就是一种对象,但是如果直接使用仍然会存在大量的问题,见如下代码: 复制代码 代码如下: Account = {balance = 0}  function Account.withdraw(v)      Account.balance = Account.balance - v  end  --下面是测试调用函数  Account.withdraw(100.00) 在上面的withdraw函数内部依赖了全局变量Account,一旦该变量发生改变,将会导致withdraw不再

  • 在ASP.NET 2.0中操作数据之二十二:为删除数据添加客户端确认

    导言 在前面一些教程中,我们已经看到如何使用应用程序框架,ObjectDataSource,以及那些提供增.改.删功能的数据Web控件.在我们已经实现的删除数据的界面中,包含一个删除按钮,当点击它的时候,会导致数据回传以及调用ObjectDataSource的Delete()方法.然后Delete()方法会调用对应业务逻辑层中的方法,再进入数据访问层,直至调用最终操作数据库的DELETE语句. 虽然这个界面已经能够让用户通过GridView,DetailsView,或者FormView控件来删除

随机推荐