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
zoom
round corner
reflected bitmap
希望本文所述对大家android程序设计有所帮助。