Android 轻松实现图片倒影效果实例代码_安卓软件开发教程-查字典教程网
Android 轻松实现图片倒影效果实例代码
Android 轻松实现图片倒影效果实例代码
发布时间:2016-12-28 来源:查字典编辑
摘要:主Activity复制代码代码如下:packagecom.mj.myweather;importandroid.app.Activity;i...

主Activity

复制代码 代码如下:

package com.mj.myweather;

import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.drawable.Drawable;

import android.os.Bundle;

import android.widget.ImageView;

import com.mj.myweather.utils.ImageUtil;

public class ImageActivity extends Activity {

// 声明控件

private ImageView mImageView01, mImageView02;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.image);

setupViews();

}

private void setupViews() {

mImageView01 = (ImageView) findViewById(R.id.image01);

mImageView02 = (ImageView) findViewById(R.id.image02);

// 获取壁纸返回值是Drawable

Drawable drawable = getWallpaper();

// 将Drawable转化为Bitmap

Bitmap bitmap = ImageUtil.drawableToBitmap(drawable);

// 缩放图片

Bitmap zoomBitmap = ImageUtil.zoomBitmap(bitmap, 300, 300);

// 获取圆角图片

Bitmap roundBitmap = ImageUtil

.getRoundedCornerBitmap(zoomBitmap, 10.0f);

// 获取倒影图片

Bitmap reflectBitmap = ImageUtil

.createReflectionImageWithOrigin(roundBitmap);

// 这里可以让Bitmap再转化为Drawable

// Drawable roundDrawable = new BitmapDrawable(roundBitmap);

// Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);

// mImageView01.setBackgroundDrawable(roundDrawable);

// mImageView02.setBackgroundDrawable(reflectDrawable);

mImageView01.setImageBitmap(roundBitmap);

mImageView02.setImageBitmap(reflectBitmap);

}

}

布局文件

复制代码 代码如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<ImageView

android:id="@+id/image01"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:padding="10dp" />

<ImageView

android:id="@+id/image02"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:padding="10dp" />

</LinearLayout>

图片处理

复制代码 代码如下:

package com.mj.myweather.utils;

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 ImageUtil {

/**

* 放大缩小图片

* @param bitmap

* @param w

* @param h

* @return

*/

public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h) {

int width = bitmap.getWidth();

int height = bitmap.getHeight();

Matrix matrix = new Matrix();

float scaleWidht = ((float) w / width);

float scaleHeight = ((float) h / height);

matrix.postScale(scaleWidht, scaleHeight);

Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height,

matrix, true);

return newbmp;

}

/**

* 将Drawable转化为Bitmap

* @param drawable

* @return

*/

public static Bitmap drawableToBitmap(Drawable drawable) {

int width = drawable.getIntrinsicWidth();

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;

}

/*

* 获得圆角图片的方法

*/

public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {

Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),

bitmap.getHeight(), Config.ARGB_8888);

Canvas canvas = new Canvas(output);

final int color = 0xff424242;

final Paint paint = new Paint();

final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());

final RectF rectF = new RectF(rect);

paint.setAntiAlias(true);

canvas.drawARGB(0, 0, 0, 0);

paint.setColor(color);

canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));

canvas.drawBitmap(bitmap, rect, rect, paint);

return output;

}

/**

* 获得带倒影的图片方法

* @param originalImage

* @return

*/

public static Bitmap createReflectionImageWithOrigin(Bitmap originalImage) {

final int reflectionGap = 4;

int width = originalImage.getWidth();

int height = originalImage.getHeight();

Matrix matrix = new Matrix();

// 图片矩阵变换(从低部向顶部的倒影)// 实现图片翻转90度

matrix.preScale(1, -1);

// 创建反转后的图片Bitmap对象,图片高是原图的一半

Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, height / 2,

width, height / 2, matrix, false);

// 创建标准的Bitmap对象,宽和原图一致,高是原图的1.5倍

Bitmap bitmapWithReflection = Bitmap.createBitmap(width,

(height + height / 2), Config.ARGB_8888);

// 创建画布对象,将原图画于画布,起点是原点位置

Canvas canvas = new Canvas(bitmapWithReflection);

canvas.drawBitmap(originalImage, 0, 0, null);

// 将反转后的图片画到画布中

Paint deafalutPaint = new Paint();

canvas.drawRect(0, height, width, height + reflectionGap, deafalutPaint);

canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);

Paint paint = new Paint();

// 创建线性渐变LinearGradient对象

LinearGradient shader = new LinearGradient(0, originalImage.getHeight(), 0,

bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff,

0x00ffffff, TileMode.CLAMP);

paint.setShader(shader);

// Set the Transfer mode to be porter duff and destination in

paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));

// Draw a rectangle using the paint with our linear gradient

// 画布画出反转图片大小区域,然后把渐变效果加到其中,就出现了图片的倒影效果

canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()

+ reflectionGap, paint);

return bitmapWithReflection;

}

}

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新安卓软件开发学习
    热门安卓软件开发学习
    编程开发子分类