Android开关按钮
支持覆盖的默认配置:
- colors
可以在项目中定义colors覆盖库中的默认配置
<!-- 正常view颜色 -->
<color name="lib_sb_color_normal_view">#E3E3E3</color>
<!-- 正常view边框颜色 -->
<color name="lib_sb_stroke_color_normal_view">#D2D2D2</color>
<!-- 选中view颜色 -->
<color name="lib_sb_color_checked_view">#4AD863</color>
<!-- 选中view边框颜色 -->
<color name="lib_sb_stroke_color_checked_view">@color/lib_sb_color_checked_view</color>
<!-- 手柄view颜色 -->
<color name="lib_sb_color_thumb_view">#FFFFFF</color>
<!-- 手柄view边框颜色 -->
<color name="lib_sb_stroke_color_thumb_view">#D2D2D2</color>
- dimens
可以在项目中定义dimens覆盖库中的默认配置
<!-- 圆角半径 -->
<dimen name="lib_sb_corner">50dp</dimen>
<!-- 手柄view上下左右间距 -->
<dimen name="lib_sb_margins">1dp</dimen>
<!-- 正常view边框大小 -->
<dimen name="lib_sb_stroke_width_normal_view">1px</dimen>
<!-- 选中view边框大小 -->
<dimen name="lib_sb_stroke_width_checked_view">1px</dimen>
<!-- 手柄view边框大小 -->
<dimen name="lib_sb_stroke_width_thumb_view">1px</dimen>
支持的xml属性配置:
<declare-styleable name="LibSwitchButton">
<!-- 正常view图片 -->
<attr name="sbImageNormal" format="reference"/>
<!-- 选中view图片 -->
<attr name="sbImageChecked" format="reference"/>
<!-- 手柄view图片 -->
<attr name="sbImageThumb" format="reference"/>
<!-- 是否选中 -->
<attr name="sbIsChecked" format="boolean"/>
<!-- 手柄view上下左右间距 -->
<attr name="sbMargins" format="dimension"/>
<!-- 手柄view左边间距 -->
<attr name="sbMarginLeft" format="dimension"/>
<!-- 手柄view顶部间距 -->
<attr name="sbMarginTop" format="dimension"/>
<!-- 手柄view右边间距 -->
<attr name="sbMarginRight" format="dimension"/>
<!-- 手柄view底部间距 -->
<attr name="sbMarginBottom" format="dimension"/>
<!-- 是否需要点击切换动画 -->
<attr name="sbIsNeedToggleAnim" format="boolean"/>
</declare-styleable>
- xml中布局:
<com.sd.lib.switchbutton.FSwitchButton
android:id="@+id/sb_rect"
android:layout_width="50dp"
android:layout_height="25dp"
android:layout_marginTop="10dp"
app:sbImageChecked="@drawable/layer_checked_view"
app:sbImageNormal="@drawable/layer_normal_view"
app:sbImageThumb="@drawable/layer_thumb_view"
app:sbIsChecked="true"
app:sbMarginBottom="2dp"
app:sbMarginLeft="0dp"
app:sbMarginRight="2dp"
app:sbMarginTop="2dp"/>
- java文件中:
sb_rect.setOnViewPositionChangeCallback(new SwitchButton.OnViewPositionChangeCallback()
{
@Override
public void onViewPositionChanged(SwitchButton switchButton)
{
float percent = switchButton.getScrollPercent() * 0.8f + 0.2f;
switchButton.getViewNormal().setScaleY(percent);
switchButton.getViewChecked().setScaleY(percent);
}
});
<com.sd.lib.switchbutton.FSwitchButton
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:id="@id/lib_sb_view_normal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
android:gravity="center"
android:text="normal" />
<TextView
android:id="@id/lib_sb_view_checked"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorAccent"
android:gravity="center"
android:text="checked" />
<TextView
android:id="@id/lib_sb_view_thumb"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:text="thumb" />
</com.sd.lib.switchbutton.FSwitchButton>
public interface SwitchButton
{
/**
* 是否处于选中状态
*
* @return
*/
boolean isChecked();
/**
* 设置选中状态
*
* @param checked true-选中,false-未选中
* @param anim 是否需要动画
* @param notifyCallback 是否需要通知回调
* @return true-调用此方法后状态发生了变化
*/
boolean setChecked(boolean checked, boolean anim, boolean notifyCallback);
/**
* 切换选中状态
*
* @param anim 是否需要动画
* @param notifyCallback 是否需要通知回调
*/
void toggleChecked(boolean anim, boolean notifyCallback);
/**
* 设置选中变化回调
*
* @param callback
*/
void setOnCheckedChangeCallback(OnCheckedChangeCallback callback);
/**
* 设置手柄view位置变化回调
*
* @param callback
*/
void setOnViewPositionChangeCallback(OnViewPositionChangeCallback callback);
/**
* 设置滚动状态变化回调
*
* @param callback
*/
void setOnScrollStateChangeCallback(OnScrollStateChangeCallback callback);
/**
* 返回滚动的百分比[0-1]
*
* @return
*/
float getScrollPercent();
/**
* 返回滚动状态
*
* @return
*/
ScrollState getScrollState();
/**
* 返回正常状态view
*
* @return
*/
View getViewNormal();
/**
* 返回选中状态view
*
* @return
*/
View getViewChecked();
/**
* 返回手柄view
*
* @return
*/
View getViewThumb();
interface OnCheckedChangeCallback
{
/**
* 选中状态变化回调
*
* @param checked
* @param switchButton
*/
void onCheckedChanged(boolean checked, SwitchButton switchButton);
}
interface OnViewPositionChangeCallback
{
/**
* 手柄view滚动回调
*
* @param switchButton
*/
void onViewPositionChanged(SwitchButton switchButton);
}
enum ScrollState
{
/**
* 空闲状态
*/
Idle,
/**
* 拖动状态
*/
Drag,
/**
* 惯性滑动状态
*/
Fling
}
interface OnScrollStateChangeCallback
{
/**
* 滚动状态变化回调
*
* @param oldState
* @param newState
* @param switchButton
*/
void onScrollStateChanged(ScrollState oldState, ScrollState newState, SwitchButton switchButton);
}
}