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>