欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-10 20:53:16
本文实例总结了android编程中图片特效处理方法。分享给大家供大家参考,具体如下: 这里介绍的android图片处理方法包括: 转换 -  drawable...

本文实例总结了android编程中图片特效处理方法。分享给大家供大家参考,具体如下:

这里介绍的android图片处理方法包括:

转换 -  drawable to  bitmap
缩放 -  zoom
圆角 -  round corner
倒影 -  reflected

bitmapprcess  code:

package com.learn.games; 
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 bitmapprocess { 
  // 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; 
    float scaleheight = h/(float)height; 
    matrix.postscale(scalewidth, scaleheight); 
    bitmap bitmap2 = bitmap.createbitmap(bitmap, 0, 0, width, height, matrix, true); 
    return bitmap2;    
  } 
  // drawable to bitmap 
  public static bitmap drawable2bitmap(drawable drawable){ 
    int width = drawable.getintrinsicheight(); 
    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; 
  } 
  // round corner bitmap 
  public static bitmap getroundcornerbitmap(bitmap bitmap, float roundpx){ 
    int width = bitmap.getwidth(); 
    int height = bitmap.getheight(); 
    bitmap bitmap2 = bitmap.createbitmap(width, height, config.argb_8888); 
    canvas canvas = new canvas(bitmap2); 
    final int color = 0xff424242; 
    final paint paint = new paint(); 
    final rect rect = new rect(0, 0, width, height); 
    final rectf rectf = new rectf(rect); 
    paint.setcolor(color); 
    paint.setantialias(true); 
    canvas.drawargb(0, 0, 0, 0); 
    canvas.drawroundrect(rectf, roundpx, roundpx, paint); 
    paint.setxfermode(new porterduffxfermode(mode.src_in)); 
    canvas.drawbitmap(bitmap, rect, rect, paint); 
    return bitmap2; 
  } 
  // reflect bitmap 
  public static bitmap createreflectedbitmap(bitmap bitmap){ 
    final int reflectedgap = 4; 
    int width = bitmap.getwidth(); 
    int height = bitmap.getheight(); 
    matrix matrix = new matrix(); 
    matrix.prescale(1, -1); 
    bitmap reflectedimage = bitmap.createbitmap(bitmap, 0, height/2, width, height/2, matrix, false); 
    bitmap reflectedbitmap = bitmap.createbitmap(width, (height + height/2), config.argb_8888); 
    canvas canvas = new canvas(reflectedbitmap); 
    canvas.drawbitmap(bitmap, 0, 0, null); 
    paint defaultpaint = new paint(); 
    canvas.drawrect(0, height, width, height + reflectedgap, defaultpaint);
    canvas.drawbitmap(reflectedimage, 0, height + reflectedgap, null); 
    paint paint = new paint(); 
    lineargradient shader = new lineargradient(0, bitmap.getheight(), 0, 
                reflectedbitmap.getheight() + reflectedgap, 0x70ffffff, 0x00ffffff, tilemode.clamp); 
    paint.setshader(shader); 
    paint.setxfermode(new porterduffxfermode(mode.dst_in)); 
    canvas.drawrect(0, height, width, reflectedbitmap.getheight() + reflectedgap, paint); 
    return reflectedbitmap; 
  } 
}

java code:

package com.learn.games; 
import android.app.activity; 
import android.graphics.bitmap; 
import android.graphics.drawable.bitmapdrawable; 
import android.graphics.drawable.drawable; 
import android.os.bundle; 
import android.widget.imageview; 
public class mybitmapprocessactivity extends activity { 
  private imageview imgview1; 
  private imageview imgview2; 
  private imageview imgview3; 
  private imageview imgview4; 
  /** called when the activity is first created. */ 
  @override 
  public void oncreate(bundle savedinstancestate) { 
    super.oncreate(savedinstancestate); 
    setcontentview(r.layout.main); 
    drawbitmap(); 
  } 
  private void drawbitmap(){ 
    imgview1 = (imageview)findviewbyid(r.id.imgview1); 
    imgview2 = (imageview)findviewbyid(r.id.imgview2); 
    imgview3 = (imageview)findviewbyid(r.id.imgview3); 
    imgview4 = (imageview)findviewbyid(r.id.imgview4); 
    drawable drawable = this.getwallpaper(); 
    bitmap bitmap = bitmapprocess.drawable2bitmap(drawable);            // drawable to bitmap 
    bitmap zoombitmap = bitmapprocess.zoombitmap(bitmap, 100, 100);         // zoom  
    bitmap roundbitmap = bitmapprocess.getroundcornerbitmap(zoombitmap, 10.0f);   // round corner  
    bitmap reflectedbitmap = bitmapprocess.createreflectedbitmap(zoombitmap);    // reflect bitmap
    // drawable to bitmap 
    imgview1.setimagebitmap(bitmap); 
    imgview2.setimagebitmap(zoombitmap); 
    imgview3.setimagebitmap(roundbitmap); 
    imgview4.setimagebitmap(reflectedbitmap); 
    // bitmap to drawable 
    drawable rounddrawable = new bitmapdrawable(roundbitmap); 
    drawable reflecteddrawable = new bitmapdrawable(reflectedbitmap); 
    imgview1.setbackgrounddrawable(rounddrawable); 
    imgview2.setbackgrounddrawable(reflecteddrawable); 
  } 
}

xml:

<?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/imgview1" 
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"/> 
  <imageview android:id="@+id/imgview2" 
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"/> 
  <imageview android:id="@+id/imgview3" 
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"/> 
  <imageview android:id="@+id/imgview4" 
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"/> 
</linearlayout>

效果图:

drawable2bitmap

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

zoom

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

round corner

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

reflected bitmap

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

希望本文所述对大家android程序设计有所帮助。