網(wǎng)上有很多關(guān)于大小pos機(jī)刷卡,Android View篇之調(diào)整字體大小滑桿的實(shí)現(xiàn)的知識(shí),也有很多人為大家解答關(guān)于大小pos機(jī)刷卡的問題,今天pos機(jī)之家(m.afbey.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來看下吧!
本文目錄一覽:
大小pos機(jī)刷卡
小伙伴們大家好呀,介紹一個(gè)稍微有點(diǎn)意思的View,在很多閱讀類、新聞?lì)惖腁PP上都標(biāo)配的字體大小調(diào)整功能。100多行代碼就可以實(shí)現(xiàn),來看看效果吧!
效果圖(這里沒有辦法插入動(dòng)圖)
思路分析
1、刻度條代表著每個(gè)字體的大小值,想想Android的SeekBar就是這樣的功能呀,改一下刻度浮標(biāo)的樣式即可。
2、刻度條上面的標(biāo)注的文本代表著字體大小的說明,如果用一個(gè)LinearLayout包著3個(gè)TextView的方法很難實(shí)現(xiàn)文本跟刻度對(duì)齊,只能畫出來了。
開始寫代碼
我們以SeekBar作為基礎(chǔ),對(duì)它進(jìn)行重寫onDraw()的方法,在這之前我們先來初始化一下基本屬性。
/** * 字體大小調(diào)整滑桿 * Created by ChenRui on 2017/10/13 0013 12:50. */public class RaeSeekBar extends AppCompatSeekBar { // 刻度說明文本,數(shù)組數(shù)量跟刻度數(shù)量一致,跟mTextSize的長度要一致 private String[] mTickMarkTitles = new String[]{ "A", "標(biāo)準(zhǔn)", "", "", "A" }; // 刻度代表的字體大小 private int[] mTextSize = new int[]{ 16, 18, 24, 26, 28 }; // 刻度文本畫筆 private final Paint mTickMarkTitlePaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); // 刻度文本字體大小 private float mTickMarkTitleTextSize = 18; // 刻度文本跟刻度之間的間隔 private float mOffsetY = 40; // 刻度線的高度 private int mLineHeight = 10; // 保存位置大小信息 private final Rect mRect = new Rect(); // ...省略一些其他構(gòu)造函數(shù) public RaeSeekBar(Context context, AttributeSet attrs) { super(context, attrs); init(); } protected void init() { // 初始化刻度文本字體大小 mTickMarkTitleTextSize = getSize(mTickMarkTitleTextSize); // 刻度文本跟刻度之間的間隔 mOffsetY = getSize(mOffsetY); // 刻度線的高度 mLineHeight = getSize(mLineHeight); // 刻度文字的對(duì)齊方式為居中對(duì)齊 mTickMarkTitlePaint.setTextAlign(Paint.Align.CENTER); // 刻度文字的字體顏色 mTickMarkTitlePaint.setColor(ContextCompat.getColor(getContext(), R.color.ph1)); // 設(shè)置最大刻度值為字體大小數(shù)組的長度 setMax(mTextSize.length); // 設(shè)置當(dāng)前的刻度 setProgress(1); }}
測量布局
因?yàn)橐谠瓉淼腟eekBar的基礎(chǔ) 上添加文本,那就應(yīng)該在原來的SeekBar的 高度上再增加最大刻度的文字的高度就是控件布局的高度。
@Overrideprotected synchronized void onMeasure(int width="360px",height="auto" />
重繪
總結(jié)一下畫的思路,這樣可以比較好理解代碼的實(shí)現(xiàn)。整個(gè)過程一共需要我們畫3部分:
直線刻度線刻度文本當(dāng)然還有個(gè)滑動(dòng)塊,這個(gè)我們可以使用SeekBar自帶的效果,即可以自定義樣式,又能偷下懶。下面來一個(gè)個(gè)解析畫的具體步驟。
1、畫直線
我們先理解成外部是一個(gè)矩形,直線位于中間,左右兩邊的間距為滑塊的一半。通過研究發(fā)現(xiàn)getPaddingLeft() getPaddingright() 正好就是這個(gè)一半值。
[站外圖片上傳中...(image-34565a-1557546251449)]
2、刻度線
很容易看得出來,刻度線實(shí)際是把直線進(jìn)行等分,等分的多少取決于setMax()的取值,也相當(dāng)于mTextSize.length,這樣我們通過畫直線就能輕松實(shí)現(xiàn)了。
3、刻度文本
最重要的是確定文本所在的(x,y) 坐標(biāo)值即可,不難發(fā)現(xiàn)文本的坐標(biāo)是跟隨刻度線的位置變化的,所以在畫刻度線的時(shí)候就可以一起把文本也畫出來了。
4、滑塊位置
系統(tǒng)滑塊的位置其實(shí)是跟分割線的位置一樣的。等分直線,處于分割線中心。
@Overrideprotected void onDraw(canvas canvas) { super.onDraw(canvas); // 刻度長度 int maxLength = getMax(); int width="360px",height="auto" />
top = h2 - getSize(1); // 居中 mRect.bottom = mRect.top + getSize(1.5f); // 1.5f為直線的高度 // 直線的長度 int linewidth="360px",height="auto" />畫好了是不是等不及了來實(shí)際應(yīng)用一下呢?
具體應(yīng)用示例
布局文件<!--thumb屬性為滑塊的圖片--><com.rae.cnblogs.widget.RaeSeekBar android:id="@+id/seekBar" android:layout_width="360px",height="auto" />
thumb滑塊圖片<selector xmlns:android="http://schemas.android.com/apk/res/android" android:constantSize="true"> <item> <shape android:shape="oval"> <solid android:color="@color/badge_color" /> <size android:width="360px",height="auto" />
滑塊回調(diào)監(jiān)聽mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int value, boolean b) { // 獲取滑塊所在位置對(duì)應(yīng)的字體大小 int size = mSeekBar.getRawTextSize(value); mMessage.setTextSize(size); } //... 省略其他方法 });
以上就是關(guān)于大小pos機(jī)刷卡,Android View篇之調(diào)整字體大小滑桿的實(shí)現(xiàn)的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于大小pos機(jī)刷卡的知識(shí),希望能夠幫助到大家!
