Android仿微信相機的拍照按鈕單擊拍照,長按錄視頻。先上效果圖。

項目地址:https://github.com/c786909486/PhotoButton2/tree/v1.0
添加依賴
allprojects { repositories { ... maven { url 'https://jitpack.io' } } }dependencies { compile compile 'com.github.c786909486:PhotoButton2:v1.1' }長按效果分析
判斷是否為長按,如果是,則擴大外圓,縮小內(nèi)圓。由于要擴大外圓,所以在繪制常態(tài)的外圓時不可將圓的直徑設(shè)置為view的寬度或高度。
outRoundPaint.setAntiAlias(true); outRoundPaint.setColor(outCircleColor); if (isLongClick){ canvas.scale(1.2f,1.2f,width/2,height/2); } canvas.drawCircle(width/2,height/2, outRaduis, outRoundPaint);if (isLongClick){ canvas.drawCircle(width/2,height/2, innerRaduis /2.0f, innerRoundPaint); //畫外原環(huán) mCPaint.setAntiAlias(true); mCPaint.setColor(progressColor); mCPaint.setStyle(Paint.Style.STROKE); mCPaint.setStrokeWidth(circleWidth/2); RectF rectF = new RectF(0+circleWidth,0+circleWidth,width-circleWidth,height-circleWidth); canvas.drawArc(rectF,startAngle,mSweepAngle,false,mCPaint); }else { canvas.drawCircle(width/2,height/2, innerRaduis, innerRoundPaint); }然后通過手勢識別判斷單擊、長按、長按抬起。
mDetector = new GestureDetectorCompat(context, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onSingleTapConfirmed(MotionEvent e) { //單擊 isLongClick = false; if (listener != null) { listener.onClick(TakePhotoButton.this); } return super.onSingleTapConfirmed(e); } @Override public void onLongPress(MotionEvent e) { //長按 isLongClick = true; postInvalidate(); if (listener != null) { listener.onLongClick(TakePhotoButton.this); } } }); mDetector.setIsLongpressEnabled(true); @Override public boolean onTouchEvent(MotionEvent event) { mDetector.onTouchEvent(event); switch(MotionEventCompat.getActionMasked(event)) { case MotionEvent.ACTION_DOWN: isLongClick = false; break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: if (isLongClick) { isLongClick = false; postInvalidate(); if (this.listener != null) { this.listener.onLongClickUp(this); } } break; } return true; }自定義接口對各個狀態(tài)進行監(jiān)聽
public interface OnProgressTouchListener { /** * 單擊 * @param photoButton */ void onClick(TakePhotoButton photoButton); /** * 長按 * @param photoButton */ void onLongClick(TakePhotoButton photoButton); /** * 長按抬起 * @param photoButton */ void onLongClickUp(TakePhotoButton photoButton); void onFinish(); }
新聞熱點
疑難解答