Android高手進(jìn)階教程(二十二)之Android中幾種圖像特效處理的集錦匯總!!
大家好,這一節(jié)給大家分享的是Android中幾種圖像特效處理的小技巧,比如圓角,倒影,還有就是圖片縮放,Drawable轉(zhuǎn)化為Bitmap,Bitmap轉(zhuǎn)化為Drawable等等.
廢話少說了,直接講解今天的實(shí)例,本例主要是先獲取壁紙(getWallpaper()),然后對(duì)當(dāng)前壁紙的一些特效處理.大家按步驟一步一步來:
第一步:新建一個(gè)Android工程命名為ImageDemo,工程結(jié)構(gòu)如下:
第二步:新建一個(gè).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布局文件,主要放了兩個(gè)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大功告成了!!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android 兩個(gè)Service的相互監(jiān)視實(shí)現(xiàn)代碼
這篇文章主要介紹了Android 兩個(gè)Service的相互監(jiān)視實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2016-10-10
Android 物理游戲之重力系統(tǒng)開發(fā)示例代碼
介紹Android 物理游戲之重力系統(tǒng),這里提供了詳細(xì)的資料整理,并附示例代碼和實(shí)現(xiàn)效果圖,有興趣的小伙伴可以參考下2016-08-08
Android CameraX結(jié)合LibYUV和GPUImage自定義相機(jī)濾鏡
之前使用Camera實(shí)現(xiàn)了一個(gè)自定義相機(jī)濾鏡(Android自定義相機(jī)濾鏡 ),但是運(yùn)行起來有點(diǎn)卡頓,這次用Camerax來實(shí)現(xiàn)一樣的效果發(fā)現(xiàn)很流暢,在此記錄一下,也希望能幫到有需要的同學(xué)2021-12-12
Linux系統(tǒng)下安裝android sdk的方法步驟
這篇文章主要介紹了Linux系統(tǒng)下安裝android sdk的方法步驟,文中介紹的非常詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友可以們下面來一起看看吧。2017-03-03
將cantk runtime嵌入到現(xiàn)有的APP中的方法
今天小編就為大家分享一篇關(guān)于將cantk runtime嵌入到現(xiàn)有的APP中的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12
Android 給RecyclerView添加分割線的具體步驟(分享)
下面小編就為大家?guī)硪黄狝ndroid 給RecyclerView添加分割線的具體步驟(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04
Android自定義View實(shí)現(xiàn)仿1號(hào)店垂直滾動(dòng)廣告條代碼
這篇文章主要介紹了Android自定義View實(shí)現(xiàn)仿1號(hào)店垂直滾動(dòng)廣告條代碼,實(shí)現(xiàn)步驟及實(shí)現(xiàn)原理本文給大家介紹的非常詳細(xì),需要的朋友參考下吧2017-01-01
Android編程之SurfaceView實(shí)例詳解
這篇文章主要介紹了Android編程之SurfaceView用法,簡(jiǎn)要分析了View和SurfaceView的區(qū)別,并結(jié)合實(shí)例形式分析了SurfaceView的具體使用步驟與相關(guān)技巧,需要的朋友可以參考下2016-02-02
Android仿淘寶頭條基于TextView實(shí)現(xiàn)上下滾動(dòng)通知效果
這篇文章主要介紹了Android TextView實(shí)現(xiàn)上下滾動(dòng)通知效果,需要的朋友可以參考下2017-03-03

