利用Matrix实现图片倒影效果

利用matrix可以实现各种图片的特效,今天就用marix加上渐变色实现图片倒影的效果,步骤如下:

1. 获取需要倒影效果的图片,这里取原图片的一半

2. 添加颜色渐变到倒影图片上

具体的实现如下面代码所述,我们以一种自定义view的形式给出效果图,代码如下:

package com.flection.view;

import com.flection.main.R;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuffXfermode;
import android.graphics.Shader.TileMode;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.view.View;

public class FlectionView extends View {

	Context mContext=null;
	public FlectionView(Context context) {
		super(context);
	}

	public FlectionView(Context context, AttributeSet attrs) {
		super(context, attrs);
		this.mContext=context;
	}

	@SuppressLint("DrawAllocation")
	@Override
	protected void onDraw(Canvas canvas) {
		//设置背景色
		this.setBackgroundColor(Color.parseColor("#8B8378"));
		Bitmap oldBitmap = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.dropbox);
		Bitmap newBitmap = createFlectionBitmap(oldBitmap);
		canvas.drawBitmap(newBitmap,newBitmap.getWidth() ,newBitmap.getHeight(), new Paint());
		this.invalidate();
	}

	//获取原图+倒影图的bitmap
	private Bitmap createFlectionBitmap(Bitmap oldBitmap) {
		int mWidth = oldBitmap.getWidth();
		int mHeight = oldBitmap.getHeight();
		//原图和倒影图之间的缝隙
		int gap = 2;
		Matrix matrix = new Matrix();
		matrix.preScale(1, -1);
		Bitmap flection = Bitmap.createBitmap(oldBitmap, 0, mHeight / 2,
				mWidth, mHeight / 2, matrix, false);
		Bitmap background = Bitmap.createBitmap(mWidth, mHeight+gap+mHeight/2, Config.ARGB_8888);
		Canvas canvas = new Canvas(background);
		Paint p1 = new Paint();
		//画出原图
		canvas.drawBitmap(oldBitmap, 0, 0, p1);
		//画出倒影图
		canvas.drawBitmap(flection, 0, mHeight+gap, p1);
		Paint shaderPaint = new Paint();
		LinearGradient shader = new LinearGradient(0, mHeight, 0,
				flection.getHeight(), 0x70ffffff, 0x00ffffff, TileMode.MIRROR);
		shaderPaint.setShader(shader);
		shaderPaint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.DST_IN));
		//画出渐变颜色
		canvas.drawRect(0, mHeight+gap, mWidth, background.getHeight(), shaderPaint);
		return background;
	}

}

实现的效果如下图:

利用Matrix实现图片倒影效果

时间: 2024-09-30 10:49:27

利用Matrix实现图片倒影效果的相关文章

Android开发--利用Matrix进行图片操作

今天和大家分享一下Android中Matrix的简单用法,Matrix其实就是一个3*3的矩阵,利用这个矩阵对图像操作.在Android中,为我们提供一些封装好的方法可以进行一些简单的图像操作,总共分为rotate(旋转),scale(缩放),translate(平移)和skew(倾斜)四种,每一种变换都提供了set, post和pre三种操作方式,除了translate,其他三种操作都可以指定中心点.其中post的方式是对原矩阵进行后乘,pre方式是对原矩阵进行前乘,另外,每一次通过set的方

Android 设置图片倒影效果

首先,贴出效果图: 1.布局文件main.xml <?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_p

android 中实现图片倒影效果

1.效果图: 2.核心代码: package com.example.pic_reflection; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.LinearGradient; import android.graphics.Mat

利用base64展示图片

其实很简单,格式如下: <img src="data:image/jpg;base64,具体的编码值" /> 示例如下: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>利用base64展示图片</title> 5 </head> 6 <body> 7 <img src="data:image/jpg;base64,/9j/4QAYR

如何利用CSS实现图片的透明效果

如何利用CSS实现图片的透明效果:建议:尽可能的手写代码,可以有效的提高学习效率和深度.在网页的实际应用中,往往需要设置图片的透明度,下面就简单介绍一下如何实现此效果.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/"

WPF利用Image实现图片按钮

之前有一篇文章也是采用了Image实现的图片按钮,不过时间太久远了,忘记了地址.好吧,这里我进行了进一步的改进,原来的文章中需要设置4张图片,分别为可用时,鼠标悬浮时,按钮按下时,按钮不可用时的图片,这里我只用了一张图片,利用C#的图片灰度处理自动获得不可用时的图片,利用图片的间距实现悬浮及按下效果.先上效果:(正常 悬浮 按下 不可用) 代码其实比较简单,唯一的难点就是把图片转换成ImageSource,在网上找了很久终于找到了一个,转换代码如下: 1 ///<summary> 2 ///设

利用CSS切割图片技术来动态显示图片

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

利用Selenium实现图片文件上传的两种方式介绍

在实现UI自动化测试过程中,有一类需求是实现图片上传,这种需求根据开发的实现方式,UI的实现方式也会不同. 一.直接利用Selenium实现 这种方式是最简单的一种实现方式,但是依赖于开发的实现. 当开发直接使用file类型的input实现图片文件的上传时,实例:<input type="file" name=''filename"> 我们可以直接利用Selenium提供的方法实现文件上传,但是因为依赖开发的实现,而且目前实现基本都会利用框架,所以这种实现方式有很

CSS Sprites技术(将背景图整合到一张图中,再利用CSS背景图片定位到要显示的位置)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ