QQ视频20221210141233
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Typeface;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.util.TypedValue;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import androidx.annotation.Nullable;
import java.util.HashMap;
public class ScrollNumberView extends View {
private String TAG = "NumberTouch";
//要绘制的数字
private final String[] mNumbers = new String[]{
"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "15", "20"};
//新建一个矩形
private final RectF mCenterRect = new RectF();
private float mMaxWidth;
private float mMaxHeight;
// private final float mRoundRectWidth = ConvertUtil.toPx(135);
// private final float mRoundRectHeight = ConvertUtil.toPx(135);
// private final float minuteInterval = ConvertUtil.toPx(35);
// private final float mNumberInterval = ConvertUtil.toPx(50);
private final float mRoundRectWidth = toPx(135); // 矩形的宽度
private final float mRoundRectHeight = toPx(135); // 矩形的高度
private final float minuteInterval = toPx(35); // 分钟和矩形的间隔
/**
* 每个文字的间距
*/
private final float mNumberInterval = toPx(70);
private final Paint mPaintCenterRect = new Paint();
private final Paint mPaintCenterRectLine = new Paint();
//画笔
private final Paint mPaintNumber = new Paint();
private final float mNumberMinSize = 40;
private final float mNumberMaxSize = 100;
private final float mSizeRate = 0.23f;
//选中的数字索引值
private int mSelectorIndex = 6;
//mCurrentDx:这个变量是左右滑动的距离
private float mCurrentDx;
private final String minute = "分钟";
private final int[] mColors = new int[]{
Color.TRANSPARENT, Color.TRANSPARENT, Color.WHITE, Color.TRANSPARENT, Color.TRANSPARENT};
private float[] positions = new float[]{
0.1f, 0.1f, 0.5f, 0.8f, 1f};
private Paint mPaintMinute;
//保存数字实体类
private final HashMap<String, Point> mMapPoint = new HashMap<>();
/**
* 选中的数字回调监听
*/
private SelectorListener mSelectorListener;
private float mMaxWidthNumber = 0f;
//屏幕宽度,中间的位置
private float mScreenX = 0f;
private float mNumberCenterX = 0f;
//在这里判断手指离开以后,需要重新设置数字坐标
private boolean isUp = false;
//手势监听器,手势滑动监听,可以监听左滑,右滑。
private final GestureDetector mGestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
// Log.d("111333","手势监听器,手势滑动监听,可以监听左滑,右滑。----------------------------打印mCurrentDx="+mCurrentDx);
//distanceX:这个变量是左右滑动的距离
mCurrentDx = distanceX;
//是否停止绘制自定义view
boolean isStop = false;
// last number
if (mSelectorIndex == mNumbers.length - 1) {
//最后一个数字
if (distanceX > 0) {
//用户左滑了
//取出最末尾的数字
String right = mNumbers[mNumbers.length - 1];
//获取数字实体类
Point pointRight = getPoint(right)