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. }

最后的效果如下:


更多相关文章

  1. Android(安卓)中TabLayout自定义选择背景滑块的实例代码
  2. Android(安卓)带输入框圆角Dialog--EditDialog
  3. 查看Android的源代码
  4. 解决android:layout_marginBottom在RelativeLayout中无效的bug
  5. android2.2 2.3状态栏区别
  6. Android第三方文件选择器aFileChooser使用方法详解
  7. 实现Android多张图片选择
  8. Android(安卓)Studio常用快捷键、Android(安卓)Studio快捷键大全
  9. android studio常用快捷键整理

随机推荐

  1. Android项目--团购类客户端
  2. 【安卓学习笔记】Android Studio第9课—
  3. Android上用Jackson Json解析json
  4. Android 开发之旅:又见Hello World!
  5. Android(安卓)源码本地编译脚本 & 编译An
  6. Android的一些安装
  7. androidx升级注意事项
  8. 低版本android project在高版本ADK中运行
  9. android 截取验证码的两种实现方式
  10. 创建Android(安卓)虚拟机AVD(Android(安卓