这篇文章主要讲解了Android自定义控件RatingBar调整字体大小的方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
项目需要,做一个可以调整字体大小的控件,能在滑动或点击时改变选中的位置,效果图如下:
这是一个类似于RatingBar的控件,然而配置RatingBar的样式难以实现这样的效果,如选中的图案和上面的文字对齐。因此,有必要写一个自定义View来实现。
思路如下:
- 新建一个TextRatingBar继承View类
- 在onDraw()方法中绘制元素:文字、横线、短竖线和圆形标记
- 重写onMeasure()方法,控制整体大小和边界
- 在onTouchEvent()方法中处理ACTION_DOWN和ACTION_MOVE事件,调用invalidate()方法引起View的重绘,以更新视图
- 定义一个用户选中某个字体的回调接口,以通知外部处理,比如去设置字体大小。
TextRatingBar类代码如下:
package cc.rome753.demo.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.view.View;public class TextRatingBar extends View{ //paddingLeft private int mLeft; //paddingTop private int mTop; //当前rating private int mRating; //总raring数 private int mCount; //rating文字 private String[] texts = {"小","中","大","超大"}; //相邻raring的距离 private int mUnitSize; //bar到底部的距离 private int mYOffset; //小竖条的一半长度 private int mMarkSize; Paint paint = new Paint(); public TextRatingBar(Context context) { this(context, null); } public TextRatingBar(Context context, AttributeSet attrs) { this(context, attrs, 0); } public TextRatingBar(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mCount = 4; mRating = 0; mMarkSize = 3; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); Log.i("test", getMeasuredWidth() + " " + getMeasuredHeight()); mLeft = (getPaddingLeft()+getPaddingRight())/2; mTop = getPaddingTop(); int barWidth = getMeasuredWidth() - 2 * mLeft; mUnitSize = barWidth/(mCount - 1); mYOffset = getMeasuredHeight() - getPaddingBottom(); } @Override protected void onDraw(Canvas canvas) { paint.setStrokeWidth(2); paint.setColor(Color.RED); canvas.drawLine(mLeft,mYOffset,mLeft+mRating*mUnitSize,mYOffset,paint); for(int i=0;i<mCount;i++){ paint.setColor(Color.RED); canvas.drawLine(mLeft+i*mUnitSize,mYOffset-mMarkSize,mLeft+i*mUnitSize,mYOffset+mMarkSize,paint); paint.setColor(mRating == i ? Color.RED : Color.BLACK); paint.setTextSize(30); paint.setTextAlign(Paint.Align.CENTER); canvas.drawText(texts[i],mLeft+i*mUnitSize,mTop,paint); } paint.setColor(Color.GRAY); canvas.drawLine(mLeft+mRating*mUnitSize,mYOffset,mLeft+(mCount-1)*mUnitSize,mYOffset,paint); canvas.drawCircle(mLeft+mRating*mUnitSize,mYOffset,10,paint); } @Override public boolean onTouchEvent(MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE){ float x = event.getX(); for(int i=0;i<mCount;i++){ float distance = mLeft+i*mUnitSize - x; if(Math.abs(distance) < 100){ setRating(i); if(onRatingListener != null){ onRatingListener.onRating(mRating); } break; } } } return true; } public void setRating(int rating) { mRating = rating; invalidate(); } private OnRatingListener onRatingListener; public void setOnRatingListener(OnRatingListener onRatingListener) { this.onRatingListener = onRatingListener; } interface OnRatingListener{ void onRating(int rating); }}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容猜你喜欢
AI推送时光机Android自定义控件RatingBar调整字体大小的方法
后端开发2023-05-31
Android自定义控件RatingBar调整字体大小
后端开发2022-06-06
Android 自定义TextView实现文本内容自动调整字体大小
后端开发2022-06-06
【Android自定义控件】自适应文字大小的TextView
后端开发2022-06-06
pycharm怎么调整界面字体大小_pycharm调整界面字体大小的方法
后端开发2024-05-10
Android使用自定义字体的方法
后端开发2022-06-06
Android自定义控件的创建方法
后端开发2022-06-06
android自定义控件的方法是什么
后端开发2023-08-16
android根据分辨率自动调整字体大小的实例代码
后端开发2022-06-06
wpf自定义控件绑定结构体的方法是什么
后端开发2023-09-06
Android自定义View圆形进度条控件的方法
后端开发2023-05-31
解析Android中使用自定义字体的实现方法
后端开发2022-06-06
Android中让图片自适应控件的大小的方法
后端开发2022-06-06
Android中View自定义组合控件的基本编写方法
后端开发2022-06-06
win7调整文本字体像素大小的问题另类解决方法
后端开发2023-05-31
实例讲解Android应用中自定义组合控件的方法
后端开发2022-06-06
实例讲解Android中的View类以及自定义View控件的方法
后端开发2022-06-06
咦!没有更多了?去看看其它编程学习网 内容吧