Android高手進(jìn)階教程(二十二)之Android中幾種圖像特效處理的集錦匯總!!
大家好,這一節(jié)給大家分享的是Android中幾種圖像特效處理的小技巧,比如圓角,倒影,還有就是圖片縮放,Drawable轉(zhuǎn)化為Bitmap,Bitmap轉(zhuǎn)化為Drawable等等.
廢話少說了,直接講解今天的實(shí)例,本例主要是先獲取壁紙(getWallpaper()),然后對當(dāng)前壁紙的一些特效處理.大家按步驟一步一步來:
第一步:新建一個Android工程命名為ImageDemo,工程結(jié)構(gòu)如下:
第二步:新建一個.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轉(zhuǎn)化為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轉(zhuǎn)化為Bitmap Bitmap bitmap = ImageUtildrawableToBitmap(drawable); //縮放圖片 Bitmap zoomBitmap = ImageUtilzoomBitmap(bitmap, 100, 100); //獲取圓角圖片 Bitmap roundBitmap = ImageUtilgetRoundedCornerBitmap(zoomBitmap, 0f); //獲取倒影圖片 Bitmap reflectBitmap = ImageUtilcreateReflectionImageWithOrigin(zoomBitmap); //這里可以讓Bitmap再轉(zhuǎn)化為Drawable // Drawable roundDrawable = new BitmapDrawable(roundBitmap); // Drawable reflectDrawable = new BitmapDrawable(reflectBitmap); // mImageViewsetBackgroundDrawable(roundDrawable); // mImageViewsetBackgroundDrawable(reflectDrawable); mImageViewsetImageBitmap(roundBitmap); mImageViewsetImageBitmap(reflectBitmap); } }
第五步:運(yùn)行上述工程,查看效果如下:
OK大功告成了!!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android Studio實(shí)現(xiàn)簡易計算器(表格布局TableLayout)
這篇文章主要為大家詳細(xì)介紹了Android Studio實(shí)現(xiàn)簡易計算器,表格布局TableLayout,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-03-03Android巧用ActionBar實(shí)現(xiàn)tab導(dǎo)航效果
這篇文章主要為大家詳細(xì)介紹了Android巧用ActionBar實(shí)現(xiàn)tab導(dǎo)航效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-05-05Android Studio中通過CMake使用NDK并編譯自定義庫和添加預(yù)編譯庫
這篇文章是基于Android Studio 3.01版本的,NDK是R16。本文重點(diǎn)給大家介紹Android Studio中通過CMake使用NDK并編譯自定義庫和添加預(yù)編譯庫的相關(guān)知識,感興趣的朋友一起看看吧2018-01-01Android自定義ListView實(shí)現(xiàn)仿QQ可拖拽列表功能
這篇文章主要介紹了Android自定義ListView實(shí)現(xiàn)仿QQ可拖拽列表功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-08-08