Android开源:AvatarLabelView - 可配置的迷你版轻量级 Label 辅助类
DortheaRBP
8年前
<h2>AvatarLabelView</h2> <p>一个可配置的迷你版轻量级 Label 辅助类,支持多种配置效果,具体不同配置展示效果如下图。</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/e4e6553312d6453c830fc8b536c00331.png"></p> <h2>说明文档</h2> <p>如下是关于 Label View 的相关使用方式、属性说明、拓展自定义的解释说明。</p> <h3>使用样例</h3> <pre> <code class="language-java"><cn.label.avatarlabelview.LabelImageView app:textContent="晚场" app:textContentSize="14sp" app:direction="rightTop" app:labelTopDistance="20dp" app:labelTopPadding="10dp" app:labelBottomPadding="10dp" app:backgroundColor="@color/colorPrimaryDark" android:src="@mipmap/ic_launcher" android:background="#f3a212" android:layout_width="150dp" android:layout_height="100dp"/></code></pre> <h3>已实现类说明</h3> <table> <thead> <tr> <th>类别</th> <th>类名</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>library</td> <td>LabelViewHelper</td> <td>标签辅助核心实现类</td> </tr> <tr> <td>library</td> <td>LabelView</td> <td>基于 LabelViewHelper 实现的一个纯标签 View,可嵌套在 ViewGroup 中使用等</td> </tr> <tr> <td>demo</td> <td>LabelImageView</td> <td>基于 LabelViewHelper 实现的一个具备标签的 ImageView,可属性配置等</td> </tr> <tr> <td>demo</td> <td>LabelLinearLayout</td> <td>基于 LabelViewHelper 实现的一个具备标签的 LinearLayout,可属性配置等</td> </tr> <tr> <td>customer</td> <td>XxxView</td> <td>类比上面 demo 中基于 LabelViewHelper 实现自己的 Label View</td> </tr> </tbody> </table> <h3>属性说明</h3> <table> <thead> <tr> <th>属性</th> <th>含义</th> </tr> </thead> <tbody> <tr> <td>app:backgroundColor</td> <td>Label 的背景颜色</td> </tr> <tr> <td>app:textTitleColor</td> <td>第一行文字的颜色,如果 Label 作为单行(不设置textTitle)则无效</td> </tr> <tr> <td>app:textContentColor</td> <td>第二行文字的颜色</td> </tr> <tr> <td>app:textTitle</td> <td>第一行文字的内容,如果文字过长注意调节 labelTopPadding 的值变大,单行 Label 时不要设置此值</td> </tr> <tr> <td>app:textContent</td> <td>第二行文字的内容,单行显示时推荐用此</td> </tr> <tr> <td>app:textTitleSize</td> <td>第一行文字的大小,默认10sp,如果 Label 作为单行(不设置textTitle)则无效</td> </tr> <tr> <td>app:textContentSize</td> <td>第二行文字的大小,默认12sp</td> </tr> <tr> <td>app:labelTopPadding</td> <td>第一行文字上边缘距离背景顶部(注意三角形或者梯形)的偏移量,默认为15dp</td> </tr> <tr> <td>app:labelCenterPadding</td> <td>第一行文字底部与第二行文字顶部之间的偏移距离</td> </tr> <tr> <td>app:labelBottomPadding</td> <td>textContent 文字与 Label 背景底部的空隙距离,默认为 10dp</td> </tr> <tr> <td>app:labelTopDistance</td> <td>当设置该值大于0时显示的 Label 为梯形的样式,梯形上顶宽度与该值成正比;当不设置时 Label 为三角形样式</td> </tr> <tr> <td>app:textTitleStyle</td> <td>第一行文字的样式,normal、italic、bold,如果 Label 作为单行(不设置textTitle)则无效</td> </tr> <tr> <td>app:textContentStyle</td> <td>第二行文字的样式,normal、italic、bold</td> </tr> <tr> <td>app:direction</td> <td>Label 的位置,leftTop 或者 rightTop</td> </tr> </tbody> </table> <h3>拓展为自己 View 使用方式</h3> <ol> <li>在自己的自定义 View 构造方法创建 LabelViewHelper 对象。</li> <li>在自己的自定义 View 相关绘制方法(onDraw、dispatchDraw 等)中调用 LabelViewHelper 的 drawLabel 方法。</li> <li>至此你的自定义 View 就支持可配置的 Label 效果了,如需别的拓展可以参考 demo 或者查看 LabelViewHelper 其他方法。</li> </ol> <p>具体拓展应用到自己自定义的其他控件中如下:</p> <pre> <code class="language-java">public class LabelImageView extends YourCustomerView { //...... public LabelImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mLabelViewHelper = new LabelViewHelper(context, attrs); } //注意:ViewGroup 最好重写 dispatchDraw 方法 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mLabelViewHelper.drawLabel(this, canvas); } //...... }</code></pre> <p> </p> <p> </p>