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