Android如何进行图片添加ps倒影效果怎么做

51CTO旗下网站
Android中几种图像特效处理
大家好,这一节给大家分享的是Android图像特效处理的小技巧,比如圆角、倒影、还有就是图片缩放、Drawable转化为Bitmap、Bitmap转化为Drawable等等。
作者:佚名来源:oschina| 13:57
Android中有很多图片特效处理技巧,比如圆角、倒影,今天为大家分享一个实例,本例主要是先获取壁纸(getWallpaper()),然后对当前壁纸的一些特效处理。
第一步:新建一个Android工程命名为ImageDemo,工程结构如下:
第二步:新建一个.java文件,命名为ImageUtil.java,在里面定义一些图片处理方法,代码如下:
view&plaincopy&to&clipboardprint?&package&com.android.&import&android.graphics.B&import&android.graphics.C&import&android.graphics.LinearG&import&android.graphics.M&import&android.graphics.P&import&android.graphics.PixelF&import&android.graphics.PorterDuffX&import&android.graphics.R&import&android.graphics.RectF;&import&android.graphics.Bitmap.C&import&android.graphics.PorterDuff.M&import&android.graphics.Shader.TileM&import&android.graphics.drawable.D&public&class&ImageUtil&{&&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&&}&&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&&}&&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&&}&&public&static&Bitmap&createReflectionImageWithOrigin(Bitmap&bitmap){&final&int&reflectionGap&=&4;&int&width&=&bitmap.getWidth();&int&height&=&bitmap.getHeight();&Matrix&matrix&=&new&Matrix();&matrix.preScale(1,&-1);&Bitmap&reflectionImage&=&Bitmap.createBitmap(bitmap,&0,&height/2,&width,&height/2,&matrix,&false);&Bitmap&bitmapWithReflection&=&Bitmap.createBitmap(width,&(height&+&height/2),&Config.ARGB_8888);&Canvas&canvas&=&new&Canvas(bitmapWithReflection);&canvas.drawBitmap(bitmap,&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&shader&=&new&LinearGradient(0,&bitmap.getHeight(),&0,&bitmapWithReflection.getHeight()&+&reflectionGap,&0x70ffffff,&0x00ffffff,&TileMode.CLAMP);&paint.setShader(shader);&&paint.setXfermode(new&PorterDuffXfermode(Mode.DST_IN));&&canvas.drawRect(0,&height,&width,&bitmapWithReflection.getHeight()&+&reflectionGap,&paint);&return&bitmapWithR&}&}&&
第三步:修改main.xml布局文件,主要放了两个ImageView控件,代码如下:
view&plaincopy&to&clipboardprint?&&?xml&version=&1.0&&encoding=&utf-8&?&&&LinearLayout&xmlns:android=&http://schemas.android.com/apk/res/android&&android:orientation=&vertical&&android:layout_width=&fill_parent&&android:layout_height=&fill_parent&&&&&ImageView&android:id=&@+id/image01&&android:layout_width=&wrap_content&&android:layout_height=&wrap_content&&android:padding=&10px&&/&&&ImageView&android:id=&@+id/image02&&android:layout_width=&wrap_content&&android:layout_height=&wrap_content&&android:padding=&10px&&/&&&/LinearLayout&&&
第四步:修改主核心程序,ImageDemo.java,代码如下:
view&plaincopy&to&clipboardprint?&package&com.android.&import&android.app.A&import&android.graphics.B&import&android.graphics.drawable.D&import&android.os.B&import&android.widget.ImageV&public&class&Imagedemo&extends&Activity&{&private&ImageView&mImageView01,mImageView02;&public&void&onCreate(Bundle&savedInstanceState)&{&super.onCreate(savedInstanceState);&setContentView(R.layout.main);&setupViews();&}&private&void&setupViews(){&mImageView01&=&(ImageView)findViewById(R.id.image01);&mImageView02&=&(ImageView)findViewById(R.id.image02);&&Drawable&drawable&=&getWallpaper();&&Bitmap&bitmap&=&ImageUtil.drawableToBitmap(drawable);&&Bitmap&zoomBitmap&=&ImageUtil.zoomBitmap(bitmap,&100,&100);&&Bitmap&roundBitmap&=&ImageUtil.getRoundedCornerBitmap(zoomBitmap,&10.0f);&&Bitmap&reflectBitmap&=&ImageUtil.createReflectionImageWithOrigin(zoomBitmap);&&&&&&mImageView01.setImageBitmap(roundBitmap);&mImageView02.setImageBitmap(reflectBitmap);&}&}&&
第五步:运行上述工程,查看效果如下:
【编辑推荐】【责任编辑: TEL:(010)】
大家都在看猜你喜欢
头条头条热点关注热点
24H热文一周话题本月最赞
讲师:738821人学习过
讲师:30648人学习过
讲师:171402人学习过
精选博文论坛热帖下载排行
本书是一本介绍当前主流计算机网络应用技术的工具图书,全面总结了当前最主流、最基础的计算机网络应用,包括局域网和互联网应用两方面。在...
订阅51CTO邮刊博客分类:
要实现两张图片叠加效果 通过查找资料 发现可以用setLayerInset() 实现
package com.twy.
import android.app.A
import android.graphics.B
import android.graphics.BitmapF
import android.graphics.C
import android.graphics.M
import android.graphics.P
import android.graphics.drawable.BitmapD
import android.graphics.drawable.D
import android.graphics.drawable.LayerD
import android.os.B
import android.view.ViewGroup.MarginLayoutP
import android.widget.ImageV
import android.widget.ImageView.ScaleT
import android.widget.LinearL
import android.widget.LinearLayout.LayoutP
public class testDemo extends Activity {
private LinearL
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lay = (LinearLayout) findViewById(R.id.linearLayout1);
firstLay();
private void firstLay() {
Bitmap mbitmap_c = BitmapFactory.decodeResource(getResources(),
R.drawable.cc);
Bitmap mbitmap_b = BitmapFactory.decodeResource(getResources(),
R.drawable.bb);
Bitmap mbitmap_e = BitmapFactory.decodeResource(getResources(),
R.drawable.ee);
Bitmap mbitmap_f = BitmapFactory.decodeResource(getResources(),
R.drawable.ff);
Drawable[] array = new Drawable[4];
array[0] = new BitmapDrawable(mbitmap_b);
array[1] = new BitmapDrawable(mbitmap_c);
array[2] = new BitmapDrawable(mbitmap_e);
array[3] = new BitmapDrawable(mbitmap_f);
LayerDrawable la = new LayerDrawable(array);
la.setLayerInset(0, 0, 0, 0, 0);
la.setLayerInset(1, 80, 0, 0, 0);
la.setLayerInset(2, 160, 0, 0, 0);
la.setLayerInset(3, 240, 0, 0, 0);
ImageView img = new ImageView(this);
img.setImageDrawable(la);
lay.addView(img);
本来想实现图片间两两有一部分重叠 但这种实现效果是一张图片覆盖在另一张上。
浏览: 135787 次
来自: 上海
有demo源码么有啊?
为什么我做嵌套以后会出现卡屏
楼主求分享下源码
为什么第二个ListView
显示不全?
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'由 匿名 (未验证)
这里转载一个牛人的博客:
下面,是我参照他的博客实现的一个效果图。这个程序,在他的基础上进行了一些改良,但改良得不是很好,嘻嘻,等有空,继续研究。该实例下载路径:
(一)截图
(二)实现关键:
1、改写Gallery,实现图片的层叠和透明度渐变。 主要是改写getChildStaticTransformation方法
2、对图片进行加工处理,实现透明倒影。
3、对于超大图片,先进行缩小。防止图片过大,超出屏幕范围报错。
(三)代码
1、Activity类代码:GallaryBrowser.java
2、图片处理代码,主要是实现旋转和倒影: MyImgView.java
3、自定义的Gallery,继承Gallery类,重写getChildStaticTransformation方法,实现图片的重叠和透明度渐变:CoverFlow.java
4、图片适配器:ImageAdapter。这里,我改写了getView方法,把图片按照一定比例进行缩放,防止图片过大,超出屏幕而导致报错。
添加新评论如何利用matrix实现图片倒影效果
转载 &更新时间:日 14:18:28 & 作者:summerpxy
利用matrix可以实现各种图片的特效,比如图片的旋转、缩放、移动,甚至是图片倒影效果,这篇文章为大家介绍了matrix实现图片倒影的代码,感兴趣的小伙伴们可以参考一下
本文主要内容就是用marix加上渐变色实现图片倒影的效果,步骤如下:
&1. 获取需要倒影效果的图片,这里取原图片的一半
&2. 添加颜色渐变到倒影图片上
&具体的实现如下面代码所述,我们以一种自定义view的形式给出效果图,代码如下:
package com.flection.
import com.flection.main.R;
import android.annotation.SuppressL
import android.content.C
import android.graphics.B
import android.graphics.Bitmap.C
import android.graphics.BitmapF
import android.graphics.C
import android.graphics.C
import android.graphics.LinearG
import android.graphics.M
import android.graphics.P
import android.graphics.PorterDuffX
import android.graphics.Shader.TileM
import android.graphics.drawable.BitmapD
import android.util.AttributeS
import android.view.V
public class FlectionView extends View {
Context mContext=
public FlectionView(Context context) {
super(context);
public FlectionView(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext=
@SuppressLint("DrawAllocation")
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);
实现的效果如下图:
以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具博客分类:
本例子在写的时候参照了网上的一个demo,在其基础上改的,具体出处找不到了,所以现在也没法附链接了
本文中可以参考注意积累的知识点如下:
1.将Drawable转换成BitMap
/**
* 将Drawable转化为Bitmap
* @param drawable
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);
}
2.将BitMap转换成Drawable
Drawable drawable = new BitmapDrawable(bitmap);
3.图片抖动时镜面效果的实现原理:
首先将原始图片的倒影绘画出来,注意不要与原始图片绘制到一张画布上;其次将两张图片布局在一起(上下布置);最后将原图与倒影都加上Animation,两个Animation效果相反。
demo参见附件
(463.2 KB)
下载次数: 62
浏览: 14163 次
来自: 无锡
谢谢你了 学习了
不会的。。。
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'}

我要回帖

更多关于 ps给图片添加倒影 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信