(安卓) 自定义View 绘画圆(包括简单的接口回调)
来源:互联网 发布:淘宝图片分辨率72 编辑:程序博客网 时间:2024/06/05 18:57
上图:
这道题主要是 当点击Button按钮的时候 开始走进度条 ,当进度条走到100时 跳转到第二个页面
上代码:
xml类:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="bawe.day1105lianximoni.MainActivity"> <bawe.day1105lianximoni.ProgressView android:layout_width="400dp" android:layout_height="200dp" android:id="@+id/pv_data" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="点击我" android:id="@+id/bt_one" /></LinearLayout>
MainActivity 类:
package bawe.day1105lianximoni;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;public class MainActivity extends AppCompatActivity { private Button bt_one; private ProgressView pv; //定义一个静态的常量 private static final int FLAG = 0x123; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { //指定在同一个频道 case FLAG: int progress = pv.getProgress(); progress += 10; if (progress > 100) { progress = 0; } //更新当前的进度值 pv.setProgress(progress); //指定在同一个频道 FLAG handler.sendEmptyMessageDelayed(FLAG, 1000); break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bt_one = (Button) findViewById(R.id.bt_one); pv = (ProgressView) findViewById(R.id.pv_data); bt_one.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { handler.sendEmptyMessageDelayed(FLAG, 1000); } }); //接口的方法 pv.setListener(new ProgressView.ProhressUpdateListener() { @Override public void onProgressUpdated(int progress) { //如果当前的进度等于100 if (progress>=100){ //就进行跳转 startActivity(new Intent(MainActivity.this,Main2Activity.class)); } } }); } =============================================================================
ProgressView类:
package bawe.day1105lianximoni;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.View;import static android.R.attr.radius;/** * Created by 迷人的脚毛!! on 2017/11/5. */public class ProgressView extends View{ //接口对象 private ProhressUpdateListener listener; //定义一个接口 interface ProhressUpdateListener{ void onProgressUpdated(int progress); } //对外提供一个set方法 public void setListener(ProhressUpdateListener listener) { this.listener = listener; } //设置角度为0 private int progress=0; public ProgressView(Context context) { super(context); } public ProgressView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public ProgressView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); }//Progress get和set方法 public int getProgress() { return progress; } public void setProgress(int progress) { this.progress = progress; //重新刷新一下 postInvalidate(); if (listener!=null){ //当前的进度 listener.onProgressUpdated(progress); } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int width = getWidth(); int height = getHeight(); //绘制范围 int min = Math.min(width, height); //半径 int i = min / 2; //绘制外层最大的圆 Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setColor(Color.BLUE); paint.setStyle(Paint.Style.STROKE); canvas.drawCircle(i,i,i,paint); //重置 paint.reset(); paint.setStyle(Paint.Style.STROKE); paint.setColor(Color.RED); //设置图形的边框厚度 paint.setStrokeWidth(20); //绘画扇形 canvas.drawArc(10, 10, min-10, min-10, -90, progress*360/100, true, paint); //重置 paint.reset(); //设置颜色 paint.setColor(Color.WHITE); //设置实心 paint.setStyle(Paint.Style.FILL_AND_STROKE); canvas.drawCircle(i,i,i-20,paint); // 画进度文字 paint.reset(); paint.setColor(Color.BLUE); paint.setTextSize(40); Rect rect = new Rect(); paint.getTextBounds(progress + "", 0, String.valueOf(progress).length(), rect); int textWidth = rect.width(); int textHeight = rect.height(); canvas.drawText(progress + "", i-textWidth/2, i-textHeight/2, paint); }}
这个代码里面包裹了绘圆,绘画扇形, 绘画进度文字
阅读全文
0 0
- (安卓) 自定义View 绘画圆(包括简单的接口回调)
- 浅谈安卓自定义view(一):制作一个最最最简单的自定义view
- iphone自定义view画面(绘画)
- kotlin Recycler View 简单应用自定义adapter ,包括接口
- 安卓自定义控件(View)(二)之接口回调机制实现TopBar的点击事件(从新手角度出发)
- 使用View绘画简单的图形
- 安卓自定义view进阶(1)
- 安卓初学-自定义View(Creating a View Class)
- 安卓自定义控件(三)实现自定义View
- 自定义View时,用到Paint Canvas的一些温故,讲讲用路径绘画实现动画效果(基础篇 三)
- 自定义view之绘画五角星
- 自定义view之绘画太极图
- 安卓自定义View
- 安卓自定义view
- 安卓自定义View
- 安卓自定义View
- 安卓自定义view
- 自定义View的绘画加载的画圆圈
- 机房收费系统——登录窗体
- Java Object类
- 整数划分问题
- java基础-面向对象三大特征(初学者)
- 程序3-2 开灯问题
- (安卓) 自定义View 绘画圆(包括简单的接口回调)
- 双缓冲区
- 从命令行输入5个整数,放入一整型数组,然后打印输出。要求: 如果输入数据不为整数,要捕获输入不匹配异常,显示“请输入整数”;如果输入数据多余5个,捕获数组越界异常,显示“请输入5个整数”。 无论是否发
- 分治策略
- 杂谈二
- param()、serialize() 和serializeArray()区别
- Vue1.0学习笔记
- 操作系统(3)
- 二分搜索算法