当前位置: 移动技术网 > 移动技术>移动开发>Android > Android高手进阶教程(二十二)之Android中几种图像特效处理的集锦汇总!!

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

2019年07月24日  | 移动技术网移动技术  | 我要评论

大家好,这一节给大家分享的是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大功告成了!!

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网