今天android项目里突然要做一个滑动解锁的控件,nm,ui出图就喜欢按照IOS上的控件来,这次也不例外,不过IOS上的滑动解锁效果确实还是不错。好了,废话不多说,上代码。。。
关键的View代码SlidingSeekBar.java
/**
* 描述:自定义滑动解锁(横向的)seekBar
* 特点:自定义后seekBar只能滑动并禁用点击
* 最关键的就是设置flag
* Created by ruihe on 2016/5/28.
*/
public class SlidingSeekBar extends SeekBar implements SeekBar.OnSeekBarChangeListener, View.OnTouchListener {
private Context mContext;
/**
* seekBar是否滑动的判断标志,默认为false
*/
private boolean isSlide;
/**
* 每次手指按下时处在屏幕上的横坐标
*/
private int mStartTouchX;
/**
* seekBar的状态监听
*/
private OnSeekBarStatusListener mOnSeekBarStatusListener;
private SlidingSeekBar mSlideSeekBar;
private TextView tvHint;
private View viewBg;
private int[] mLocation = new int[2];
public SlidingSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public SlidingSeekBar(Context context) {
super(context);
}
public SlidingSeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void initSlideToRightUnlock(Context context, TextView tvHint, View v, OnSeekBarStatusListener onSeekBarStatusListener) {
mSlideSeekBar = this;
this.mContext = context;
this.tvHint = tvHint;
this.viewBg = v;
this.mOnSeekBarStatusListener = onSeekBarStatusListener;
mSlideSeekBar.setProgress(0);
viewBg.setAlpha(0.0f);
tvHint.setAlpha(1.0f);
setOnTouchListener(this);
setOnSeekBarChangeListener(this);
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (!fromUser)
return;
if (!isSlide) {
seekBar.setProgress(0);
} else {
seekBar.setProgress(progress);
float tempProgress = progress * 0.01f;
viewBg.setAlpha(tempProgress);
tvHint.setAlpha(1.0f - tempProgress * 2.0f);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekB