androidスライドロック解除
3919 ワード
AndroidカスタムViewで横方向のスライドロック解除を実現し、1、真ん中にスライドすると自動的に元の位置に戻り、2、底部をスライドすると自動的にロック解除され、ロック解除のコールバックがトリガーされます.まず、効果図を見てみましょう.
上記の部分は全部で3つの部分に分けられます.背景はshapeを通過する.xml実装 スライドのロックは1枚の画像 です.文字はペイントによって中央に描画され、高さは カスタマイズ可能である.
主に実現の主な部分を紹介します.
(1)カスタム属性は次のとおりです.
(2)ondraw()メソッドの書き換え、テキストとロックの描画:
(3)最も重要なステップは、タッチイベントの処理であり、1、タッチスクリーンがACTION_DOWNイベントは、計算時にロックに触れ、ロックに触れたときにのみスライドする.2、指が移動した場合、新しい位置を取得した後、新しい位置を計算し、再描画し、反対側に移動してロック解除に成功した場合、コールバック方法を実行してロック解除に成功した.3、指がスクリーンを離れた後に再びreset Viewを行い、アニメーションは初期位置に戻る:
(4)初期位置に戻るresetLockコードは以下の通りである.
これがスライドロック解除を完了する主なステップで、最後にgithubアドレスはSlideViewにあります.
上記の部分は全部で3つの部分に分けられます.
主に実現の主な部分を紹介します.
(1)カスタム属性は次のとおりです.
(2)ondraw()メソッドの書き換え、テキストとロックの描画:
@Overrideprotected void onDraw(Canvas canvas)
{
canvas.getClipBounds(mTipsTextRect);
int cHeight = mTipsTextRect.height();
int cWidth = mTipsTextRect.width();
mPaint.setTextAlign(Paint.Align.LEFT);
mPaint.getTextBounds(mTipText, 0, mTipText.length(), mTipsTextRect);
float x = cWidth / 2f - mTipsTextRect.width() / 2f - mTipsTextRect.left;
float y = cHeight / 2f + mTipsTextRect.height() / 2f - mTipsTextRect.bottom;
canvas.drawText(mTipText, x, y, mPaint);
int rightMax = getWidth() - mLockRadius * 2;
if (mLocationX < 0) {
canvas.drawBitmap(mLockBitmap, 0, 0, mPaint);
} else if (mLocationX > rightMax) {
canvas.drawBitmap(mLockBitmap, rightMax, 0, mPaint);
} else {
canvas.drawBitmap(mLockBitmap, mLocationX, 0, mPaint);
}
}
(3)最も重要なステップは、タッチイベントの処理であり、1、タッチスクリーンがACTION_DOWNイベントは、計算時にロックに触れ、ロックに触れたときにのみスライドする.2、指が移動した場合、新しい位置を取得した後、新しい位置を計算し、再描画し、反対側に移動してロック解除に成功した場合、コールバック方法を実行してロック解除に成功した.3、指がスクリーンを離れた後に再びreset Viewを行い、アニメーションは初期位置に戻る:
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
float xPos = event.getX();
float yPos = event.getY();
if (isTouchLock(xPos, yPos)) {
mLocationX = xPos - mLockRadius;
mIsDragable = true;
invalidate();
} else {
mIsDragable = false;
}
return true;
}
case MotionEvent.ACTION_MOVE: {
if (!mIsDragable) return true;
int rightMax = getWidth() - mLockRadius * 2;
resetLocationX(event.getX(),rightMax);
invalidate();
if (mLocationX >= rightMax){
mIsDragable = false;
mLocationX = 0;
invalidate();
if (mLockListener != null){
mLockListener.onOpenLockSuccess();
}
Log.e("AnimaterListener"," ");
}
return true;
}
case MotionEvent.ACTION_UP: {
if (!mIsDragable) return true;
resetLock();
break;
}
}
return super.onTouchEvent(event);
}
(4)初期位置に戻るresetLockコードは以下の通りである.
private void resetLock(){
ValueAnimator anim = ValueAnimator.ofFloat(mLocationX,0);
anim.setDuration(300);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
mLocationX = (Float) valueAnimator.getAnimatedValue();
invalidate();
}
});
anim.start();
}
これがスライドロック解除を完了する主なステップで、最後にgithubアドレスはSlideViewにあります.