图片阴影

android中开发中,有时候为了某种效果需要给ImageView 或者LinearLayout画阴影。

为ImageView画阴影的主要的思想利用已知图片,然后构造一个阴影的bitmap。最后设置阴影的bitmap作为ImageView的背景。

这里参考了一个帖子:http://stackoverflow.com/questions/3567312/android-drop-shadow-on-view

利用这个思想。构造代码如下:

Java代码 收藏代码
  1. publicvoiddrawImageDropShadow(){
  2. BlurMaskFilterblurFilter=newBlurMaskFilter(3,BlurMaskFilter.Blur.OUTER);
  3. PaintshadowPaint=newPaint();
  4. shadowPaint.setMaskFilter(blurFilter);
  5. int[]offsetXY=newint[2];
  6. BitmaporiginalBitmap=BitmapFactory.decodeResource(this.getResources(),R.drawable.favoritelist);
  7. BitmapshadowBitmap=originalBitmap.extractAlpha(shadowPaint,offsetXY);
  8. BitmapshadowImage32=shadowBitmap.copy(Bitmap.Config.ARGB_8888,true);
  9. Canvasc=newCanvas(shadowImage32);
  10. c.drawBitmap(originalBitmap,0,0,null);
  11. ImageViewimageView1=(ImageView)findViewById(R.id.shadowImageView);
  12. imageView1.setImageBitmap(shadowImage32);
  13. }
下面是设置LinearLayout的背景。用xml文件画Rectangle来作为LinearLayout的背景。思想和前面的一样。不同的是通过.xml创建一个Drawable,然后
制定 宽和高, 将Drawable转化bitmap 画阴影bitmap,然后将阴影bitmap转化为drawable,最后将drawable设置为LinearLayout的背景。
代码如下:
说明需要一个方法:将drawable转化为bitmap
一般通用的方法为:
 
Java代码 收藏代码
  1. publicstaticBitmapdrawableToBitmap(Drawabledrawable){
  2. Bitmapbitmap=Bitmap
  3. .createBitmap(
  4. drawable.getIntrinsicWidth(),
  5. drawable.getIntrinsicHeight(),
  6. drawable.getOpacity()!=PixelFormat.OPAQUE?Bitmap.Config.ARGB_8888
  7. :Bitmap.Config.RGB_565);
  8. Canvascanvas=newCanvas(bitmap);
  9. //canvas.setBitmap(bitmap);
  10. drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
  11. drawable.draw(canvas);
  12. returnbitmap;
  13. }
 

 
 

我创建的drawable是一个xml文件,而不是图片,所以,drawable.getIntrinsicHeight()得不到值。所以要手动传递参数设宽度和高度。代码如下:

Java代码 收藏代码
  1. privateBitmapdrawableToBitmap(Drawabledrawable,intwidth,intheight){
  2. Bitmapbitmap=Bitmap.createBitmap(
  3. width,
  4. height,
  5. drawable.getOpacity()!=PixelFormat.OPAQUE?Bitmap.Config.ARGB_8888
  6. :Bitmap.Config.RGB_565);
  7. Canvascanvas=newCanvas(bitmap);
  8. drawable.setBounds(0,0,width,height);
  9. drawable.draw(canvas);
  10. returnbitmap;
  11. }

 
最后设置阴影的代码:
 
Java代码 收藏代码
  1. publicvoiddrawLayoutDropShadow(){
  2. LinearLayoutlinearLayout=(LinearLayout)findViewById(R.id.testShadowLinearLayout);
  3. BlurMaskFilterblurFilter=newBlurMaskFilter(3,BlurMaskFilter.Blur.OUTER);
  4. PaintshadowPaint=newPaint();
  5. shadowPaint.setMaskFilter(blurFilter);
  6. Drawabledrawable=this.getResources().getDrawable(R.drawable.backgroundservicescolor);
  7. int[]offsetXY=newint[2];
  8. BitmaporiginalBitmap=drawableToBitmap(drawable,200,100);
  9. BitmapshadowBitmap=originalBitmap.extractAlpha(shadowPaint,offsetXY);
  10. BitmapshadowImage32=shadowBitmap.copy(Bitmap.Config.ARGB_8888,true);
  11. Canvasc=newCanvas(shadowImage32);
  12. c.drawBitmap(originalBitmap,0,0,null);
  13. Drawabled=newBitmapDrawable(shadowImage32);
  14. linearLayout.setBackgroundDrawable(d);
  15. }
 

最后的效果如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值