android 滑动取值_Android自定义标尺滑动选择值效果

本文实例为大家分享了Android实现滑动标尺选择值,效果图

1.自定义属性attrs.xml

2.自定义RulerView

import android.content.Context;

import android.content.res.TypedArray;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.util.AttributeSet;

import android.view.MotionEvent;

import android.view.VelocityTracker;

import android.view.View;

import android.view.ViewConfiguration;

import android.widget.Scroller;

public class RulerView extends View {

private int mMinVelocity;

private Scroller mScroller; //Scroller是一个专门用于处理滚动效果的工具类 用mScroller记录/计算View滚动的位置,再重写View的computeScroll(),完成实际的滚动

private VelocityTracker mVelocityTracker; //主要用跟踪触摸屏事件(flinging事件和其他gestures手势事件)的速率。

private int mWidth;

private int mHeight;

private float mSelectorValue = 50.0f; // 未选择时 默认的值 滑动后表示当前中间指针正在指着的值

private float mMaxValue = 200; // 最大数值

private float mMinValue = 100.0f; //最小的数值

private float mPerValue = 1; //最小单位 如 1:表示 每2条刻度差为1. 0.1:表示 每2条刻度差为0.1

// 在demo中 身高mPerValue为1 体重mPerValue 为0.1

private float mLineSpaceWidth = 5; // 尺子刻度2条线之间的距离

private float mLineWidth = 4; // 尺子刻度的宽度

private float mLineMaxHeight = 420; // 尺子刻度分为3中不同的高度。 mLineMaxHeight表示最长的那根(也就是 10的倍数时的高度)

private float mLineMidHeight = 30; // mLineMidHeight 表示中间的高度(也就是 5 15 25 等时的高度)

private float mLineMinHeight = 17; // mLineMinHeight 表示最短的那个高度(也就是 1 2 3 4 等时的高度)

private float mTextMarginTop = 10; //o

private float mTextSize = 30; //尺子刻度下方数字 textsize

private boolean mAlphaEnable = false; // 尺子 最左边 最后边是否需要透明 (透明效果更好点)

private float mTextHeight; //尺子刻度下方数字 的高度

private Paint mTextPaint; // 尺子刻度下方数字( 也就是每隔10个出现的数值) paint

private Paint mLinePaint; // 尺子刻度 paint

private int mTotalLine; //共有多少条 刻度

private int mMaxOffset; //所有刻度 共有多长

private float mOffset; // 默认状态下,mSelectorValue所在的位置 位于尺子总刻度的位置

private int mLastX, mMove;

private OnValueChangeListener mListener; // 滑动后数值回调

private int mLineColor = Color.GRAY; //刻度的颜色

private int mTextColor = Color.BLACK; //文字的颜色

public RulerView(Context context) {

this(context, null);

}

public RulerView(Context context, AttributeSet attrs) {

this(context, attrs, 0);

}

public RulerView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

init(context, attrs);

}

protected void init(Context context, AttributeSet attrs) {

mScroller = new Scroller(context);

this.mLineSpaceWidth = myfloat(25.0F);

this.mLineWidth = myfloat(2.0F);

this.mLineMaxHeight = myfloat(100.0F);

this.mLineMidHeight = myfloat(60.0F);

this.mLineMinHeight = myfloat(40.0F

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值