ReflectionImage类代码:import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.Bitmap.Config;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.LinearGradient;

import android.graphics.Matrix;

import android.graphics.Paint;

import android.graphics.PorterDuff.Mode;

import android.graphics.PorterDuffXfermode;

import android.graphics.Shader.TileMode;

import android.graphics.drawable.BitmapDrawable;

import android.util.AttributeSet;

import android.widget.ImageView;

//图片倒影

public class ReflectionImage extends ImageView

{

// 是否为Reflection模式

private boolean mReflectionMode = true;

public ReflectionImage(Context context)

{

super(context);

}

public ReflectionImage(Context context, AttributeSet attrs)

{

super(context, attrs);

// 取得原始图片的bitmap并重画

BitmapDrawable bd = (BitmapDrawable) this.getDrawable();

Bitmap originalImage = bd.getBitmap();

DoReflection(originalImage);

}

public ReflectionImage(Context context, AttributeSet attrs, int defStyle)

{

super(context, attrs, defStyle);

Bitmap originalImage = ((BitmapDrawable) this.getDrawable()).getBitmap();

DoReflection(originalImage);

}

public void setReflectionMode(boolean isRef)

{

mReflectionMode = isRef;

}

public boolean getReflectionMode()

{

return mReflectionMode;

}

// 只重写了setImageResource,和构造函数里面干了同样的事情

@Override

public void setImageResource(int resId)

{

Bitmap originalImage = BitmapFactory.decodeResource(getResources(), resId);

DoReflection(originalImage);

// super.setImageResource(resId);

}

private void DoReflection(Bitmap originalImage)

{

final int reflectionGap = 4; // 原始图片和反射图片中间的间距

int width = originalImage.getWidth();

int height = originalImage.getHeight();

// 反转

Matrix matrix = new Matrix();

matrix.preScale(1, -1);

// reflectionImage就是下面透明的那部分,可以设置它的高度为原始的3/4,这样效果会更好些

Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, 0, width, height, matrix, false);

// 创建一个新的bitmap,高度为原来的两倍

Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height), Config.ARGB_8888);

Canvas canvasRef = new Canvas(bitmapWithReflection);

// 先画原始的图片

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

// 画间距

Paint deafaultPaint = new Paint();

canvasRef.drawRect(0, height, width, height + reflectionGap, deafaultPaint);

// 画被反转以后的图片

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

// 创建一个渐变的蒙版放在下面被反转的图片上面

Paint paint = new Paint();

LinearGradient shader = new LinearGradient(0, originalImage.getHeight(), 0, bitmapWithReflection.getHeight() + reflectionGap, 0x80ffffff, 0x00ffffff,

TileMode.CLAMP);

// Set the paint to use this shader (linear gradient)

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

canvasRef.drawRect(0, height, width, bitmapWithReflection.getHeight() + reflectionGap, paint);

// 调用ImageView中的setImageBitmap

this.setImageBitmap(bitmapWithReflection);

}

}

android 字体倒影,Android笔记:图片倒影、ReflectionImage相关推荐

  1. android字体ratingbar,Android 自定义View之自定义评分选择器RatingBar

    DtRatingBar 一个使用在android上的RatingBar.GitHub地址:DtRatingBar 使用依赖: implementation 'com.yetland.dtratingb ...

  2. android 字体百分比,android 解决百分比布局适配时Textview的字体Textsize比例缩放问题...

    在使用百分比布局的过程中,大家可能会遇到一个问题,Textview的控件大小是由百分比分数算出来的,但是字体大小Textsize却没法确定.于是我想到继承textview写一个自定义的PercentT ...

  3. android字体好看,Android:更好的自定义字体方案

    摘要: 在一个应用中,我需要在所有的UI组件中使用客户提供的字体.这听起来似乎是个很稀松平常的任务,不是吗?是的,我当时也是这么想的.然后我震惊了,Android竟然没有提供一个简单优雅的方式来做这件 ...

  4. android 字体编程,Android编程之Calligraphy:Android 自定义字体库

    Calligraphy是android 自定义字体库 添加依赖 Download from Maven Central (.jar) OR Java dependencies { compile 'u ...

  5. android字体行距,android textview设置字体的行距和字间距

    字间距 textView有一个属性android:textScaleX是调节字间距的,它的值是一个float型.查看源代码,默认textView 此属性是使用的是: android.internal. ...

  6. android字体行距,android中怎么调整字体的间距和行间距

    在网页中都是很轻松的就可以调整间距的.在android中,我个人并没有去设置过. 下面就来说说android中的间距问题. 原文:http://blog.csdn.net/fancylovejava/ ...

  7. android 字体失真,Android 图片及文字模糊效果

    Glade implementation'com.github.bumptech.glide:glide:4.7.1' implementation'jp.wasabeef:glide-transfo ...

  8. android 字体变细,android 字体设置为中等粗细

    Android TextView设置字体粗细只有三种状态,textStyle取值只有bold.nomral.italic.客户需求是字体是medium粗细,只因ios是有medium属性,Androi ...

  9. Android字体权重,android – 如何设置自定义字体权重?

    就像主题暗示的那样,我想以编程方式更改/设置任意字体的font weight. 编辑:我的意思是一般用于绘制字符串的字体. 谢谢你的任何信息. 解决方法: 据我所知,加载字体后无法修改.您可以从现有字 ...

  10. android 字体空格,android – 在textview中设置字母之间的空格

    我今天必须自己这样做,所以这里有一些关于这个问题的更新: 从API 21开始,您可以使用XML属性android:letterSpacing ="2"或者来自代码myEditTex ...

最新文章

  1. 批量提取出apk文件中的classes.dex文件
  2. Apache Ignite——集合分布式缓存、计算、存储的分布式框架
  3. SSL 数字证书助力电子商务,让您网络购物更安心
  4. css中的white-space属性
  5. 牛客 数素数 (20)
  6. Gson 字符串与对象相互转换工具类
  7. 【Unity】6.1 Unity中的C#脚本基础知识
  8. xrd精修教程_XRD精修系列干货 | 带你领略晶体之美
  9. Unity经典游戏教程之:是男人就下100层
  10. lombok 的bug?lombok 导致 springmvc 使用 @RequestBody注解 接收 json数据 对象参数绑定失败
  11. 文件上传控件 css,CSS3 自定义文件上传输入控件界面
  12. Linux rmmod命令
  13. Visio—如何画虚线?
  14. ORB-SLAM3单目初始化,地图的初始化
  15. oracle同义词ddl,同义词 oracle,oracle里synonym的作用是什么?
  16. androidのBack返回键,home键,menu键监听使用
  17. c# emgucv 切图_自己积累的一些Emgu CV代码(主要有图片格式转换,图片裁剪,图片翻转,图片旋转和图片平移等功能)...
  18. openlayer地图裁切
  19. IKAnalyzer如何自定义远端词库
  20. java面试项目中遇到什么问题,大量教程

热门文章

  1. 面试官这Redis夺命连环12问,谁顶得住?
  2. 原来在首席架构眼里MySQL果然如此不一样!
  3. JVM学习-类文件结构
  4. Mac Docker安装MySQL5.7
  5. “理了么”app使用体验
  6. MFC中属性表单和向导对话框的使用
  7. 【调研】在总体为n的情况下,多少样本有代表性?
  8. js中 new Date()使用说明
  9. 公益图书馆-学习笔记五-jquery来动态设置div高度
  10. POJ 3107 - Godfather