Android实现ImageView阴影和图层效果
程序员文章站
2023-12-19 14:02:52
本文实例为大家分享了imageview阴影和图层效果的实现代码,供大家参考,具体内容如下
import android.app.activity;
impor...
本文实例为大家分享了imageview阴影和图层效果的实现代码,供大家参考,具体内容如下
import android.app.activity; import android.content.context; import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.graphics.canvas; import android.graphics.color; import android.graphics.paint; import android.graphics.porterduff; import android.graphics.porterduff.mode; import android.graphics.porterduffxfermode; import android.graphics.rect; import android.graphics.rectf; import android.graphics.drawable.drawable; import android.os.bundle; import android.view.view; public class mycanvasactivity extends activity { /** called when the activity is first created. */ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(new imageeffect(this)); } class imageeffect extends view{ paint paint; public imageeffect(context context){ super(context); paint= new paint(); //初始化画笔,为后面阴影效果使用。 paint.setantialias(true);//去除锯齿。 paint.setshadowlayer(5f, 5.0f, 5.0f, color.black); //设置阴影层,这是关键。 paint.setxfermode(new porterduffxfermode(mode.src_in)); } public void ondraw(canvas canvas){ super.ondraw(canvas); int posx = 20; int posy = 50; int picwidth,picheight; drawable drawable = getresources().getdrawable(r.drawable.pic); drawable dbe = getresources().getdrawable(r.drawable.pic).mutate();//如果不调用mutate方法,则原图也会被改变,因为调用的资源是同一个,所有对象是共享状态的。 drawable drawtest = getresources().getdrawable(r.drawable.pic); bitmap bmp = bitmapfactory.decoderesource(getresources(), r.drawable.pic); picwidth = drawable.getintrinsicwidth(); picheight = drawable.getintrinsicheight(); drawtest.setbounds(posx, (2 * posy) + picheight, posx + picwidth, (2 * posy) + 2 * picheight ); drawable.setbounds(posx,posy,posx+picwidth,posy+picheight); dbe.setbounds(0, 0, picwidth, picheight); canvas.drawcolor(color.white);//设置画布颜色 canvas.save(canvas.matrix_save_flag); dbe.setcolorfilter(0x7f000000,porterduff.mode.src_in); canvas.translate(posx + (int)(0.9 * picwidth/2), posy + picheight/2);//图像平移为了刚好在原图后形成影子效果。 canvas.skew(-0.9f, 0.0f);//图像倾斜效果。 canvas.scale(1.0f, 0.5f);//图像(其实是画布)缩放,y方向缩小为1/2。 dbe.draw(canvas);//此处为画原图像影子效果图,比原图先画,则会在下层。 drawable.clearcolorfilter(); canvas.restore(); canvas.save(canvas.matrix_save_flag); drawable.draw(canvas);//此处为画原图像,由于canvas有层次效果,因此会盖在影子之上。 canvas.restore(); //默认无效果原图 canvas.save(canvas.matrix_save_flag); drawtest.draw(canvas); canvas.restore(); //图片阴影效果 rect rect = new rect(2*posx + picwidth + 3, 2*posy + picheight + 3, 2*posx + 2*picwidth - 2, 2*posy + 2*picheight - 2); //由于图片的实际尺寸比显示出来的图像要大一些,因此需要适当更改下大小,以达到较好的效果 rectf rectf = new rectf(rect); canvas.drawroundrect(rectf, 10f, 10f, paint);//在原有矩形基础上,画成圆角矩形,同时带有阴影层。 canvas.drawbitmap(bmp, 2*posx + picwidth, 2*posy + picheight, null);//画上原图。 canvas.restore(); } } }
效果图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
Android实现ImageView阴影和图层效果
-
Android中listview和imageview实现条目单选效果
-
Android使用ViewFlipper和GestrueDetector共同实现滑屏效果实例
-
Android ImageView实现图片裁剪和显示功能
-
Android登陆界面实现清除输入框内容和震动效果
-
Android使用ViewFlipper和GestrueDetector共同实现滑屏效果实例
-
Android编程使用自定义shape实现shadow阴影效果的方法
-
Android ImageView实现图片裁剪和显示功能
-
Android中TextView和ImageView实现倾斜效果
-
Android登陆界面实现清除输入框内容和震动效果