阴影处理

据我所知,现在阴影有两种主流处理方式

一:通过绘制

即http://blog.csdn.net/sjf0115/article/details/7363958效果所示

public   void   setShadowLayer (float radius, float dx, float dy, int color)

radius:阴影半径

dx:X轴方向的偏移量

dy:Y轴方向的偏移量

color:阴影颜色

注意:如果半径被设置为0,意思就是去掉阴影。

  @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        setLayerType(LAYER_TYPE_SOFTWARE, null);
        Paint  shadowPaint=new Paint();
//      public void setShadowLayer(float radius, float dx, float dy, int shadowColor)
        shadowPaint.setColor(Color.BLUE);
        shadowPaint.setShadowLayer(30, 0, 15, Color.BLUE);
//      public void drawRoundRect(float left, float top, float right, float bottom, float rx, float ry,@NonNull Paint paint) {
        if(Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP) {
            canvas.drawRoundRect(0, getMeasuredHeight(), getMeasuredWidth(), getMeasuredHeight(), getMeasuredHeight()/2, getMeasuredHeight()/2, shadowPaint);
        }else{
            canvas.drawRect(0,  getMeasuredHeight(),  getMeasuredWidth(), getMeasuredHeight(), shadowPaint);
        }
    }


重写控件发现无法显示,如果没有我绘制的圆角矩形的高度,阴影是无法显示

1.不设置颜色 shadowPaint.setColor(Color.BLUE);设置阴影颜色无效

2.不显示主体高度,即如上代码所示,没有任何阴影显示

因此我只需要在原有的button上绘制一个带圆角的阴影失败,用此方法暂时不行,阴影也不带圆角,就是个长方形的

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        setLayerType(LAYER_TYPE_SOFTWARE, null);
        Paint  shadowPaint=new Paint();
//      public void setShadowLayer(float radius, float dx, float dy, int shadowColor)
        shadowPaint.setColor(Color.BLUE);
        shadowPaint.setShadowLayer(30, 0, 15, Color.BLUE);
//      public void drawRoundRect(float left, float top, float right, float bottom, float rx, float ry,@NonNull Paint paint) {
        if(Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP) {
            canvas.drawRoundRect(0, getMeasuredHeight()-50, getMeasuredWidth(), getMeasuredHeight()-20, getMeasuredHeight()/2, getMeasuredHeight()/2, shadowPaint);
        }else{
            canvas.drawRect(0,  getMeasuredHeight()-50,  getMeasuredWidth(), getMeasuredHeight()-20, shadowPaint);
        }
    }

执行上面显示效果如下:




二:使用shape叠加多层

在自定义shape中增加一层或多层,并错开,即可显示阴影效果。为增加立体感,按钮按下的时候,只设置一层。我们可以通过top, bottom, right 和 left 四个参数来控制阴影的方向和大小

//自定义两种阴影效果

第一种

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?xml version= "1.0"  encoding= "utf-8" ?>
 
<selector xmlns:android= "http://schemas.android.com/apk/res/android" >  
  <item android:state_pressed= "true"
    <layer-list> 
      <item android:left= "4dp"  android:top= "4dp" >
        <shape> 
          <solid android:color= "#ff58bb52" />  
          <corners android:radius= "30dip" /> 
        </shape>
      </item> 
    </layer-list> 
  </item>  
  <item> 
    <layer-list> 
      <!-- 第一层 -->  
      <item android:left= "4dp"  android:top= "4dp" >
        <shape> 
          <solid android:color= "#66000000" />  
          <corners android:radius= "30dip" />  
          <!-- 描边 -->  
          <stroke android:width= "1dp"  android:color= "#ffffffff" /> 
        </shape>
      </item>  
      <!-- 第二层 -->  
      <item android:bottom= "4dp"  android:right= "4dp" >
        <shape> 
          <solid android:color= "#ff58bb52" />  
          <corners android:radius= "30dip" />  
          <!-- 描边 -->  
          <stroke android:width= "1dp"  android:color= "#ffffffff" /> 
        </shape>
      </item> 
    </layer-list>
  </item> 
</selector>

第二种

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?xml version= "1.0"  encoding= "utf-8" ?>
 
<selector xmlns:android= "http://schemas.android.com/apk/res/android" >  
  <!-- 点击之后 -->  
  <item android:state_pressed= "true"
    <layer-list> 
      <item android:left= "4dp"  android:top= "4dp"
        <shape> 
          <solid android:color= "#ff58bb52" />  
          <corners android:radius= "3dp" /> 
        </shape> 
      </item> 
    </layer-list>
  </item>  
  <!-- 正常状态 -->  
  <item> 
    <layer-list> 
      <!-- 第一层 -->  
      <item android:left= "2dp"  android:top= "2dp"
        <shape> 
          <solid android:color= "#66000000" />  
          <corners android:radius= "3dp" /> 
        </shape> 
      </item>  
      <!-- 第二层 -->  
      <item android:bottom= "4dp"  android:right= "4dp"
        <shape> 
          <solid android:color= "#ff58bb52" />  
          <corners android:radius= "3dp" /> 
        </shape> 
      </item>  
      <!-- 第三层 -->  
      <item android:bottom= "6dp"  android:right= "6dp"
        <shape> 
          <solid android:color= "#ffcccccc" />  
          <corners android:radius= "3dp" /> 
        </shape> 
      </item> 
    </layer-list> 
  </item> 
</selector>

设置后的效果图如下


【A股温度计】www.agwdj.com 镜像版程序V1.0说明 •通过数据可视化技术,将复杂的A股市场数据转化为直观的图形界面,帮助投资者快速把握市场脉搏。 【核心功能】 •全景视角:突破信息碎片化局限,快速定位涨跌分布,一眼锁定今日热点板块 •板块排序:基于申万行业分类标准,对31个一级行业和131个二级行业实时动态排序 •硬件适配:智能适配不同分辨率屏幕,4K以上屏幕显示信息更多(视觉更佳) •智能缩放:A股全图让大A市场5000+个股同屏显示(支持鼠标滚轮及触摸设备5级缩放) 【三秒原则】 •三秒看懂:通过精心设计的视觉图形,让用户在三秒内看清市场整体状况 •三秒定位:智能算法让大成交额个股和热点板块自动靠前,快速定位机会 •三秒操作:极简的界面,让用户减少操作 【使用场景】 •盘前准备:快速了解隔夜市场变化,制定当日策略 •盘中监控:实时跟踪市场动向,及时把握当日机会 •盘后复盘:全面分析当日市场表现,总结经验教训 【适合人群】 •个人用户:快速了解市场整体趋势变化,辅助决策 •专业人员:获取每天市场的数据云图支持研究工作 •金融机构:作为投研系统的可视化补充组件 •财经媒体:制作专业市场分析图表和报道 【市场切换】 •默认加载"A股全图",可切换单独显示的类型如下: •上证A股/深证A股/北证A股/创业板/科创板/ST板块/可转债/ETF 【程序优势】 •运行环境:纯PHP运行(无需安装任何数据库) •数据更新:实时同步→A股温度计→www.agwdj.com •显示优化:自动适配8K/4K/2K/1080P等不同分辨率的屏幕 •设备兼容:对市面上主流的设备及浏览器做了适配(检测到手机/平板/电视等默认Chrome/Firefox/Edge内核过低的情况会自动提示) 【其他说明】 •A股温度计程序演示网址:https://www.agwdj.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值