android 字体倒影,Android笔记:图片倒影、ReflectionImage
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相关推荐
- android字体ratingbar,Android 自定义View之自定义评分选择器RatingBar
DtRatingBar 一个使用在android上的RatingBar.GitHub地址:DtRatingBar 使用依赖: implementation 'com.yetland.dtratingb ...
- android 字体百分比,android 解决百分比布局适配时Textview的字体Textsize比例缩放问题...
在使用百分比布局的过程中,大家可能会遇到一个问题,Textview的控件大小是由百分比分数算出来的,但是字体大小Textsize却没法确定.于是我想到继承textview写一个自定义的PercentT ...
- android字体好看,Android:更好的自定义字体方案
摘要: 在一个应用中,我需要在所有的UI组件中使用客户提供的字体.这听起来似乎是个很稀松平常的任务,不是吗?是的,我当时也是这么想的.然后我震惊了,Android竟然没有提供一个简单优雅的方式来做这件 ...
- android 字体编程,Android编程之Calligraphy:Android 自定义字体库
Calligraphy是android 自定义字体库 添加依赖 Download from Maven Central (.jar) OR Java dependencies { compile 'u ...
- android字体行距,android textview设置字体的行距和字间距
字间距 textView有一个属性android:textScaleX是调节字间距的,它的值是一个float型.查看源代码,默认textView 此属性是使用的是: android.internal. ...
- android字体行距,android中怎么调整字体的间距和行间距
在网页中都是很轻松的就可以调整间距的.在android中,我个人并没有去设置过. 下面就来说说android中的间距问题. 原文:http://blog.csdn.net/fancylovejava/ ...
- android 字体失真,Android 图片及文字模糊效果
Glade implementation'com.github.bumptech.glide:glide:4.7.1' implementation'jp.wasabeef:glide-transfo ...
- android 字体变细,android 字体设置为中等粗细
Android TextView设置字体粗细只有三种状态,textStyle取值只有bold.nomral.italic.客户需求是字体是medium粗细,只因ios是有medium属性,Androi ...
- Android字体权重,android – 如何设置自定义字体权重?
就像主题暗示的那样,我想以编程方式更改/设置任意字体的font weight. 编辑:我的意思是一般用于绘制字符串的字体. 谢谢你的任何信息. 解决方法: 据我所知,加载字体后无法修改.您可以从现有字 ...
- android 字体空格,android – 在textview中设置字母之间的空格
我今天必须自己这样做,所以这里有一些关于这个问题的更新: 从API 21开始,您可以使用XML属性android:letterSpacing ="2"或者来自代码myEditTex ...
最新文章
- 批量提取出apk文件中的classes.dex文件
- Apache Ignite——集合分布式缓存、计算、存储的分布式框架
- SSL 数字证书助力电子商务,让您网络购物更安心
- css中的white-space属性
- 牛客 数素数 (20)
- Gson 字符串与对象相互转换工具类
- 【Unity】6.1 Unity中的C#脚本基础知识
- xrd精修教程_XRD精修系列干货 | 带你领略晶体之美
- Unity经典游戏教程之:是男人就下100层
- lombok 的bug?lombok 导致 springmvc 使用 @RequestBody注解 接收 json数据 对象参数绑定失败
- 文件上传控件 css,CSS3 自定义文件上传输入控件界面
- Linux rmmod命令
- Visio—如何画虚线?
- ORB-SLAM3单目初始化,地图的初始化
- oracle同义词ddl,同义词 oracle,oracle里synonym的作用是什么?
- androidのBack返回键,home键,menu键监听使用
- c# emgucv 切图_自己积累的一些Emgu CV代码(主要有图片格式转换,图片裁剪,图片翻转,图片旋转和图片平移等功能)...
- openlayer地图裁切
- IKAnalyzer如何自定义远端词库
- java面试项目中遇到什么问题,大量教程