網上有很多關于大小pos機刷卡,Android View篇之調整字體大小滑桿的實現的知識,也有很多人為大家解答關于大小pos機刷卡的問題,今天pos機之家(www.tonybus.com)為大家整理了關于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
1、大小pos機刷卡
大小pos機刷卡
小伙伴們大家好呀,介紹一個稍微有點意思的View,在很多閱讀類、新聞類的APP上都標配的字體大小調整功能。100多行代碼就可以實現,來看看效果吧!
效果圖(這里沒有辦法插入動圖)
思路分析
1、刻度條代表著每個字體的大小值,想想Android的SeekBar就是這樣的功能呀,改一下刻度浮標的樣式即可。
2、刻度條上面的標注的文本代表著字體大小的說明,如果用一個LinearLayout包著3個TextView的方法很難實現文本跟刻度對齊,只能畫出來了。
開始寫代碼
我們以SeekBar作為基礎,對它進行重寫onDraw()的方法,在這之前我們先來初始化一下基本屬性。
/** * 字體大小調整滑桿 * Created by ChenRui on 2017/10/13 0013 12:50. */public class RaeSeekBar extends AppCompatSeekBar { // 刻度說明文本,數組數量跟刻度數量一致,跟mTextSize的長度要一致 private String[] mTickMarkTitles = new String[]{ "A", "標準", "", "", "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(); // ...省略一些其他構造函數 public RaeSeekBar(Context context, AttributeSet attrs) { super(context, attrs); init(); } protected void init() { // 初始化刻度文本字體大小 mTickMarkTitleTextSize = getSize(mTickMarkTitleTextSize); // 刻度文本跟刻度之間的間隔 mOffsetY = getSize(mOffsetY); // 刻度線的高度 mLineHeight = getSize(mLineHeight); // 刻度文字的對齊方式為居中對齊 mTickMarkTitlePaint.setTextAlign(Paint.Align.CENTER); // 刻度文字的字體顏色 mTickMarkTitlePaint.setColor(ContextCompat.getColor(getContext(), R.color.ph1)); // 設置最大刻度值為字體大小數組的長度 setMax(mTextSize.length); // 設置當前的刻度 setProgress(1); }}
測量布局
因為要在原來的SeekBar的基礎 上添加文本,那就應該在原來的SeekBar的 高度上再增加最大刻度的文字的高度就是控件布局的高度。
@Overrideprotected synchronized void onMeasure(int width="360px",height="auto" />
重繪
總結一下畫的思路,這樣可以比較好理解代碼的實現。整個過程一共需要我們畫3部分:
直線刻度線刻度文本當然還有個滑動塊,這個我們可以使用SeekBar自帶的效果,即可以自定義樣式,又能偷下懶。下面來一個個解析畫的具體步驟。
1、畫直線
我們先理解成外部是一個矩形,直線位于中間,左右兩邊的間距為滑塊的一半。通過研究發現getPaddingLeft() getPaddingright() 正好就是這個一半值。
[站外圖片上傳中...(image-34565a-1557546251449)]
2、刻度線
很容易看得出來,刻度線實際是把直線進行等分,等分的多少取決于setMax()的取值,也相當于mTextSize.length,這樣我們通過畫直線就能輕松實現了。
3、刻度文本
最重要的是確定文本所在的(x,y) 坐標值即可,不難發現文本的坐標是跟隨刻度線的位置變化的,所以在畫刻度線的時候就可以一起把文本也畫出來了。
4、滑塊位置
系統滑塊的位置其實是跟分割線的位置一樣的。等分直線,處于分割線中心。
@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" />畫好了是不是等不及了來實際應用一下呢?
具體應用示例
布局文件<!--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" />
滑塊回調監聽mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int value, boolean b) { // 獲取滑塊所在位置對應的字體大小 int size = mSeekBar.getRawTextSize(value); mMessage.setTextSize(size); } //... 省略其他方法 });
以上就是關于大小pos機刷卡,Android View篇之調整字體大小滑桿的實現的知識,后面我們會繼續為大家整理關于大小pos機刷卡的知識,希望能夠幫助到大家!
