欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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阴影和图层效果

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

上一篇:

下一篇: