今天给大家带来的是一个带倒影的ImageView控件,实现方法很简单,注释里面写的很详细,部分代码来自网络,我稍加了修改:
import android.content.Context;
import android.graphics.Bitmap;
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.Bitmap.Config;
import android.graphics.PorterDuff.Mode;
import android.graphics.Shader.TileMode;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.widget.ImageView;
public class ReflectImageView extends ImageView {
private Bitmap originalBitmap;
public ReflectImageView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public ReflectImageView(Context context) {
this(context, null, 0);
}
public ReflectImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
DoReflection(((BitmapDrawable)getDrawable()).getBitmap());
}
@Override
public void setImageBitmap(Bitmap bm) {
DoReflection(bm);
}
/**显示倒影效果的setImageBitmap函数*/
public void setImageBitmap(Bitmap bm,boolean isFlected) {
if (isFlected) {
super.setImageBitmap(bm);
}
}
@Override
public void setImageResource(int resId) {
originalBitmap = BitmapFactory.decodeResource(getResources(), resId);
DoReflection(originalBitmap);
}
private void DoReflection(Bitmap originalImage) {
// 原始图片和反射图片中间的间距
final int reflectionGap = 4;
int width = originalImage.getWidth();
int height = originalImage.getHeight();
// 反转
Matrix matrix = new Matrix();
// 第一个参数为1表示x方向上以原比例为准保持不变,正数表示方向不变。
// 第二个参数为-1表示y方向上以原比例为准保持不变,负数表示方向取反。
matrix.preScale(1, -0.75f);
// reflectionImage就是下面透明的那部分,可以设置它的高度为原始的3/4,这样效果会更好些
Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, 0, width, height, matrix, false);
// 创建一个新的bitmap,高度为原来的两倍
Bitmap bitmap4Reflection = Bitmap.createBitmap(width, 2 * height, Config.ARGB_8888);
// 其宽*高 = width * (height + height * 3 / 4)
Canvas canvasRef = new Canvas(bitmap4Reflection);
// defaultPaint不能为null,否则会有空指针异常。
Paint deafaultPaint = new Paint();
deafaultPaint.setAntiAlias(true);
// 先画原始的图片
canvasRef.drawBitmap(originalImage, 0, 0, deafaultPaint);
// 画间距
canvasRef.drawRect(0, height, width, height + reflectionGap, deafaultPaint);
// 画被反转以后的图片
canvasRef.drawBitmap(reflectionImage, 0, height + reflectionGap, null);
// 创建一个渐变的蒙版放在下面被反转的图片上面
Paint paint = new Paint();
LinearGradient shader = new LinearGradient(200, originalImage.getHeight(), 10, bitmap4Reflection.getHeight()
+ reflectionGap, Color.argb(100, 0, 0, 0), Color.argb(100, 0, 0, 0), TileMode.CLAMP);
paint.setShader(shader);
// Set the Transfer mode to be porter duff and destination in
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
// 将蒙板画上
canvasRef.drawRect(0, height, width, bitmap4Reflection.getHeight() + reflectionGap, paint);
// 调用ImageView中的setImageBitmap
this.setImageBitmap(bitmap4Reflection,true);
}
}
- 大小: 552.8 KB
分享到:
相关推荐
1. **获取原始视图**:首先,我们需要获取到需要创建倒影的视图,这通常是一个View或者一个ImageView。可以通过canvas.drawBitmap()方法绘制视图的内容到一个Bitmap对象上,这样我们可以对Bitmap进行进一步的操作。 ...
- 另外,还可以使用第三方库如`android-reflection-imageview`来简化倒影效果的实现。 2. **滑动翻转效果**: - 滑动翻转特效是指在用户滑动`Gallery`时,当前显示的图片进行3D翻转动画,以过渡到下一个或上一个...
4. **显示到界面上**:将处理好的带倒影的图片设置给自定义的ImageView或者自定义的ViewGroup,如RelativeLayout,然后在`Gallery`中添加这个ViewGroup,使得用户在切换图片时可以看到倒影效果。 5. **自定义...
带有倒影的图片滑动效果,注释非常详细。 部分代码如下: for (int imageId : mImageIds) { Bitmap originalImage = BitmapFactory.decodeResource(mContext .getResources(), imageId); int width = ...
本教程将深入探讨如何实现一个自定义View来为TextView和ImageView添加倒影效果。倒影效果是一种常见的视觉设计手法,能够使UI看起来更立体,增加视觉吸引力。 首先,我们需要创建一个新的Java类,继承自View或已有...
5. **合并两个Bitmap**: 最后,我们将原始图片和倒影合并到一个新的Bitmap中,然后可以将这个合并后的Bitmap设置给ImageView显示。 ```java Bitmap combinedBitmap = Bitmap.createBitmap(originalBitmap.getWidth...
8. **BitmapDrawable和ImageView**:最后,将生成的带有倒影的`Bitmap`对象转换为`BitmapDrawable`,然后设置到`ImageView`中显示。 9. **内存管理**:在处理大图或频繁生成倒影时,注意内存管理,避免`...
在"ImageShadow"项目或类中,可能会包含一个自定义的ImageView子类,扩展了ImageView的功能,以支持图片倒影。这个类可能包含了上述所有步骤的实现,包括加载图片、创建倒影、模糊处理和显示等方法。 此外,标签中...
在iOS开发中,创建图片倒影效果是一种常见的视觉设计需求,可以增强用户界面的美观性和交互体验。在标题“ios图片倒影”中提到的方法是使用`CAGradientLayer`来实现这一效果。`CAGradientLayer`是Core Animation框架...
在Android开发领域,"3D立体倒影Gallery"是一个引人入胜的示例,它展示了如何通过自定义控件实现具有创新视觉效果的图片浏览功能。Gallery是Android SDK提供的一种视图组件,用于展示可滚动的项目列表,通常用于图片...
继承自`View`或`ImageView`,并重写必要的方法如`onDraw()`。 2. **绘制原始图像**:在`onDraw()`方法中,先绘制原始图像。可以使用`Bitmap`对象加载图片,并通过`Canvas`对象进行绘制。 3. **翻转图像**:获取...
然后将倒影和原图组合到一个新的`Bitmap`对象中,再将其设置给`ImageView`显示。 在实际项目中,可能还需要考虑内存管理和优化,例如使用`BitmapFactory.Options`来解码图片,避免内存溢出。同时,对于大量的图片,...
尽管如此,我们仍然可以通过一些技巧来实现`Gallery`的倒影效果,以创建一种独特的视觉体验。 首先,我们要理解`Gallery`的基本用法。`Gallery`继承自`AbsSpinner`,并提供了水平方向上的循环滚动功能。你可以通过...
图片倒影效果则可能需要结合自定义`View`或`ImageView`来实现。开发者可以通过在原始图片下方绘制一个翻转的图片,然后调整其位置和透明度,以达到倒影效果。在Android中,可以使用`Matrix`类进行图像的旋转和翻转...
- **MainActivity**:这是主活动类,通常会包含一个ImageView,用于显示带有倒影效果的图片。在`onCreate()`方法中,会调用`ReflectionUtils`来处理图片,并将结果设置给ImageView。 - **XML布局文件**:定义了界面...
通常,它会包含一个Activity,展示一个ImageView,并在点击按钮时动态生成并显示图片的倒影。 通过以上知识点,开发者可以创建出各种动态的图片倒影效果,提升应用的用户体验。在实际开发中,可以根据需求调整倒影...
5. 将新生成的Bitmap设置给ImageView或其他显示组件。 接下来,我们来看看如何在Android Studio中实现阴影效果。在Android API 21(Lollipop)及以上版本,系统提供了`ViewCompat`类的`setElevation()`方法,可以...
在上述代码中,`ImageAdapter`用于填充`Gallery`,每个item都是一个带倒影的图片。`onItemSelected`方法会在选中项改变时被调用,启动相应的翻转动画。`addReflection`方法用于添加倒影效果,`startFlipAnimation`则...
这个话题涵盖了两个方面:创建图片的倒影效果和制作圆角图片。这两个特性可以用于提升应用的用户体验,使其看起来更加美观和专业。 首先,我们来讨论如何在Android中实现图片的倒影效果。倒影效果通常在UI设计中...
在Android开发中,创建图片倒影是一种常见的视觉效果,可以为UI设计增添独特性。本文将详细介绍如何在Android中实现图片生成倒影的功能,并结合一个名为`GalleryDemo`的示例来展示这一过程。 首先,我们需要理解...