重写View(一)弧线进度条
2016-04-16 16:36
507 查看
demo效果图
代码
MainActivity调用
代码
import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.util.AttributeSet; import android.view.View; /** * Created by Administrator on 2016/4/16. */ public class CustomView1 extends View{ int measureWidth; int measureHeight; //圆形属性 float circle;//直径 float radius;//半径 Paint circlrPaint; //圆环属性 RectF rectF;//矩形 float sweepAngle;// float sweepValue;//比例值(0~100模拟进度条) Paint arcPaint; String text;//文本 float textSize;//文字大小 Paint textPaint; public CustomView1(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { measureWidth = MeasureSpec.getSize(widthMeasureSpec); measureHeight = MeasureSpec.getSize(heightMeasureSpec); setMeasuredDimension(measureWidth,measureHeight); initView(); } private void initView() { float length = 0; if (measureHeight>=measureWidth){ length = measureWidth; }else { length = measureHeight; } //中间圆形的属性 circle = length/2; radius = length/4; //外接矩形属性 rectF = new RectF((float) (0.1*length),(float) (0.1*length), (float) (0.9*length),(float) (0.9*length)); circlrPaint = new Paint(); circlrPaint.setAntiAlias(true);//设置平滑,抗锯齿功能(就是图像边缘相对清晰一点,锯齿痕迹不那么明显) circlrPaint.setColor(getResources().getColor(R.color.colorAccent)); sweepAngle = (sweepValue/100f)*360f; arcPaint = new Paint(); arcPaint.setStyle(Paint.Style.STROKE);//设置style arcPaint.setStrokeWidth((float) (length*0.1));//圆环宽度 arcPaint.setAntiAlias(true); arcPaint.setColor(getResources().getColor(R.color.colorAccent)); textPaint = new Paint(); textPaint.setColor(Color.BLACK); textPaint.setTextSize(textSize); textPaint.setTextAlign(Paint.Align.CENTER); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawCircle(circle,circle,radius,circlrPaint); canvas.drawArc(rectF,270,sweepAngle,false,arcPaint); canvas.drawText(text,0,text.length(),circle, circle+(textSize/4),textPaint); } public void setSweepValue(float sweepValue){ if (sweepValue!=0){ this.sweepValue = sweepValue; }else { this.sweepValue = 25; } this.invalidate(); } public void setText(String text) { this.text = text; this.invalidate(); } public void setTextSize(float textSize) { this.textSize = textSize; this.invalidate(); } }
MainActivity调用
public class MainActivity extends AppCompatActivity { CustomView1 customView1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); customView1 = (CustomView1) findViewById(R.id.customView1); customView1.setText("50%"); customView1.setTextSize(30); customView1.setSweepValue(50); } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories