当前位置: 移动技术网 > IT编程>移动开发>Android > Android实现ImageView阴影和图层效果

Android实现ImageView阴影和图层效果

2019年07月24日  | 移动技术网IT编程  | 我要评论

本文实例为大家分享了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(); 
  } 
 } 
} 

效果图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网