图片阴影
16lz
2021-01-26
android中开发中,有时候为了某种效果需要给ImageView 或者LinearLayout画阴影。
为ImageView画阴影的主要的思想利用已知图片,然后构造一个阴影的bitmap。最后设置阴影的bitmap作为ImageView的背景。
这里参考了一个帖子:http://stackoverflow.com/questions/3567312/android-drop-shadow-on-view
利用这个思想。构造代码如下:
Java代码
- publicvoiddrawImageDropShadow(){
- BlurMaskFilterblurFilter=newBlurMaskFilter(3,BlurMaskFilter.Blur.OUTER);
- PaintshadowPaint=newPaint();
- shadowPaint.setMaskFilter(blurFilter);
- int[]offsetXY=newint[2];
- BitmaporiginalBitmap=BitmapFactory.decodeResource(this.getResources(),R.drawable.favoritelist);
- BitmapshadowBitmap=originalBitmap.extractAlpha(shadowPaint,offsetXY);
- BitmapshadowImage32=shadowBitmap.copy(Bitmap.Config.ARGB_8888,true);
- Canvasc=newCanvas(shadowImage32);
- c.drawBitmap(originalBitmap,0,0,null);
- ImageViewimageView1=(ImageView)findViewById(R.id.shadowImageView);
- imageView1.setImageBitmap(shadowImage32);
- }
下面是设置LinearLayout的背景。用xml文件画Rectangle来作为LinearLayout的背景。思想和前面的一样。不同的是通过.xml创建一个Drawable,然后
制定 宽和高, 将Drawable转化bitmap 画阴影bitmap,然后将阴影bitmap转化为drawable,最后将drawable设置为LinearLayout的背景。
代码如下:
说明需要一个方法:将drawable转化为bitmap
一般通用的方法为:
Java代码
- publicstaticBitmapdrawableToBitmap(Drawabledrawable){
- Bitmapbitmap=Bitmap
- .createBitmap(
- drawable.getIntrinsicWidth(),
- drawable.getIntrinsicHeight(),
- drawable.getOpacity()!=PixelFormat.OPAQUE?Bitmap.Config.ARGB_8888
- :Bitmap.Config.RGB_565);
- Canvascanvas=newCanvas(bitmap);
- //canvas.setBitmap(bitmap);
- drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
- drawable.draw(canvas);
- returnbitmap;
- }
我创建的drawable是一个xml文件,而不是图片,所以,drawable.getIntrinsicHeight()得不到值。所以要手动传递参数设宽度和高度。代码如下:
Java代码
- privateBitmapdrawableToBitmap(Drawabledrawable,intwidth,intheight){
- Bitmapbitmap=Bitmap.createBitmap(
- width,
- height,
- drawable.getOpacity()!=PixelFormat.OPAQUE?Bitmap.Config.ARGB_8888
- :Bitmap.Config.RGB_565);
- Canvascanvas=newCanvas(bitmap);
- drawable.setBounds(0,0,width,height);
- drawable.draw(canvas);
- returnbitmap;
- }
最后设置阴影的代码:
Java代码
- publicvoiddrawLayoutDropShadow(){
- LinearLayoutlinearLayout=(LinearLayout)findViewById(R.id.testShadowLinearLayout);
- BlurMaskFilterblurFilter=newBlurMaskFilter(3,BlurMaskFilter.Blur.OUTER);
- PaintshadowPaint=newPaint();
- shadowPaint.setMaskFilter(blurFilter);
- Drawabledrawable=this.getResources().getDrawable(R.drawable.backgroundservicescolor);
- int[]offsetXY=newint[2];
- BitmaporiginalBitmap=drawableToBitmap(drawable,200,100);
- BitmapshadowBitmap=originalBitmap.extractAlpha(shadowPaint,offsetXY);
- BitmapshadowImage32=shadowBitmap.copy(Bitmap.Config.ARGB_8888,true);
- Canvasc=newCanvas(shadowImage32);
- c.drawBitmap(originalBitmap,0,0,null);
- Drawabled=newBitmapDrawable(shadowImage32);
- linearLayout.setBackgroundDrawable(d);
- }
最后的效果如下:
更多相关文章
- Android(安卓)中TabLayout自定义选择背景滑块的实例代码
- Android(安卓)带输入框圆角Dialog--EditDialog
- 查看Android的源代码
- 解决android:layout_marginBottom在RelativeLayout中无效的bug
- android2.2 2.3状态栏区别
- Android第三方文件选择器aFileChooser使用方法详解
- 实现Android多张图片选择
- Android(安卓)Studio常用快捷键、Android(安卓)Studio快捷键大全
- android studio常用快捷键整理