怎么为android控件边缘添加阴影

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么为android控件边缘添加阴影相关的知识,希望对你有一定的参考价值。

为控件设置一个有阴影感的背景图片即可,可以使用shape


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



//自定义两种阴影效果

第一种

<?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>


第二种

<?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 为控件设置阴影效果,使用shape进行阴影效果绘制即可。 shape使用方法具体可自行百度。
你的采纳是我前进的动力,
记得好评和采纳,答题不易,互相帮助,
手机提问的朋友在客户端右上角评价点(满意)即可.
如果你认可我的回答,请及时点击(采纳为满意回答)按钮!!本回答被提问者和网友采纳
参考技术B 看你是什么版本的Android设备,如果是5.0以上用elevation属性就行。如果是比较低的版本,就得用其它方法了

为选定的边缘 UIView 添加阴影

【中文标题】为选定的边缘 UIView 添加阴影【英文标题】:Add shadow to selected Edges UIView 【发布时间】:2018-09-12 14:30:09 【问题描述】:

我需要创建带有阴影的 UIView,但我只需要右、左、下边缘的阴影 -> 上边缘没有阴影。有可能这样做吗?我尝试了不同的偏移量,但我没有达到我的目标。

【问题讨论】:

你的意思是你只希望阴影来自矩形的一个边缘吗?例如,阴影从底部出现,而不是从顶部或侧面出现? 您可能想使用CALayer.shadowPath - 这是一篇不错的入门博文:nachbaur.com/2010/11/16/…(不是我的) 【参考方案1】:

这样的?

let yourView = UIView()
yourView.frame = CGRect(x: 50, y: 50, width: 100, height: 100)
yourView.backgroundColor = UIColor.blue // NEEDS A COLOR TO SHOW SHADOW
yourView.layer.shadowColor = UIColor.black.cgColor
yourView.layer.shadowOpacity = 1
yourView.layer.shadowOffset = CGSize.zero
yourView.layer.shadowRadius = 10
self.view.addSubview(yourView)

【讨论】:

【参考方案2】:

在我个人看来,克服后一个问题的最佳方法是创建 UIView 的@IBDesignable 扩展并声明@IBInspectable 属性,如下所述

public extension UIView 

    // MARK: - Inspectables

    /**
     Defines the color of the shadow behind the view (defaults to nil).
     */

    @IBInspectable public var shadowColor: UIColor? 
        set 
            if let color = newValue 
                self.layer.shadowColor = color.cgColor
             else 
                self.layer.shadowColor = nil
            
         get 
            if let color = layer.shadowColor 
                return UIColor(cgColor: color)
            
            return nil
        
    

    /**
     Defines the radius of the shadow behind the view.
     */

    @IBInspectable public var shadowRadius: CGFloat 
        set(newValue) 
            self.layer.shadowRadius = newValue
         get 
            return self.layer.shadowRadius
        
    

    /**
     Defines the opacity of the shadow behind the view.
     */

    @IBInspectable public var shadowOpacity: Float 
        set(newValue) 
            self.layer.shadowOpacity = newValue
         get 
            return self.layer.shadowOpacity
        
    

    /**
     Defines the offset of the shadow behind the view.
     */

    @IBInspectable public var shadowOffset: CGSize 
        set(newValue) 
            self.layer.shadowOffset = newValue
         get 
            return self.layer.shadowOffset
        
    


之后,您将能够为情节提要中的每个 UIView(或从 UIView 继承的类)找到后面的参数。

但是,如果您以编程方式工作,则必须尝试使用​​ shadowOffset 属性,直到获得所需的视觉效果。

【讨论】:

以上是关于怎么为android控件边缘添加阴影的主要内容,如果未能解决你的问题,请参考以下文章

android编程用怎么让控件的“右边”对齐在屏幕的中心?

android view动画实现从边缘滑出的效果怎么做

android view动画实现从边缘滑出的效果怎么做

android view动画实现从边缘滑出的效果怎么做

android view怎么设置位置

这种 ANDROID边界效果怎么做的.发光或者叫阴影