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

本文介绍了如何在Android中实现图像的特效处理,包括图片的圆角处理、倒影效果以及缩放操作。通过创建Bitmap并利用Canvas、Paint等工具,实现了Drawable到Bitmap的转换,并展示了具体代码实现这些功能的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好,这一节给大家分享的是Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等等.

废话少说了,直接讲解今天的实例,本例主要是先获取壁纸(getWallpaper()),然后对当前壁纸的一些特效处理.大家按步骤一步一步来:

第一步:新建一个Android工程命名为ImageDemo,工程结构如下:

e54f4e87b977961c780ce7df6e054e94.png

第二步:新建一个.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控件,代码如下:

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:id="@+id/image01"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:padding="10px"

/>

android:id="@+id/image02"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:padding="10px"

/>

第四步:修改主核心程序,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);

}

}

第五步:运行上述工程,查看效果如下:

239c0459da130ccb6079e48a546bfc6b.png

OK大功告成了!!

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值