Android自定义标题+画圆+进度条
2017-11-05 20:44
162 查看
主函数里代码
package shidongliang.bwei.com.zhoukaodemo02; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Toast; import shidongliang.bwei.com.zhoukaodemo02.view.CustomProgess; public class MainActivity extends AppCompatActivity implements TitleView.MyCallBack { private CustomProgess progres; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); progres = (CustomProgess) findViewById(R.id.custom_path); TitleView titleView = (TitleView) findViewById(R.id.titleview_id); titleView.setCallBack(this); findViewById(R.id.btn_id).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { progres.start(); } }); } @Override public void leftClick() { Toast.makeText(this, "left", Toast.LENGTH_SHORT).show(); } @Override public void rightClick() { Toast.makeText(this, "right", Toast.LENGTH_SHORT).show(); } }自定义标题代码
package shidongliang.bwei.com.zhoukaodemo02; import android.content.Context; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.LinearLayout; /** * Created by muhanxi on 17/11/4. */ public class TitleView extends LinearLayout { public TitleView(Context context) { super(context); } public TitleView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); View view = LayoutInflater.from(context).inflate(R.layout.kaoshi_title_layout,null); view.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); addView(view); Button buttonLeft = (Button) view.findViewById(R.id.left_btn); Button buttonRight = (Button) view.findViewById(R.id.right_btn); buttonLeft.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { callBack.leftClick(); } }); buttonRight.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { callBack.rightClick(); } }); } public TitleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } private MyCallBack callBack ; public void setCallBack(MyCallBack callBack){ this.callBack = callBack; } public interface MyCallBack { public void leftClick(); public void rightClick(); } }
画圆代码
package shidongliang.bwei.com.zhoukaodemo02.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.View; /** * Created by muhanxi on 17/11/4. */ public class CircleView extends View { Paint paint ; public CircleView(Context context) { super(context); } int progress = 0 ; int max = 360; public CircleView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); paint = new Paint(); new Thread(new Runnable() { @Override public void run() { while (true){ if(progress > 360){ return; } postInvalidate(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } progress += 36 ; } } }).start(); } public CircleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); paint.setColor(Color.BLACK); canvas.drawCircle(300,300,100,paint); RectF rectF = new RectF(200,200,400,400); paint.setColor(Color.RED); paint.setStrokeWidth(20); paint.setStyle(Paint.Style.STROKE); canvas.drawArc(rectF,-90,progress,false,paint); paint.setColor(Color.WHITE); paint.setStyle(Paint.Style.FILL); int percent = progress; //中间的进度百分比,先转换成float在进行除法运算,不然都为0 float textWidth = paint.measureText(percent+" % "); paint.setTextSize(20); canvas.drawText((float)progress/(float) 360 * 100 +"%",300,300,paint); } }进度条代码
package shidongliang.bwei.com.zhoukaodemo02.view; import android.content.Context; import android.content.Intent; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.RectF; import android.util.AttributeSet; import android.view.View; import com.xys.libzxing.zxing.activity.CaptureActivity; /** * Created by LYY on 2017/11/4. */ public class CustomProgess extends View { private Paint paint; private int progress = 0 ; Context context ; public CustomProgess(Context context) { super(context); } public CustomProgess(Context context, AttributeSet attrs) { this(context, attrs,0); } public CustomProgess(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.context = context; //创建一个画笔 paint = new Paint(); // 抗锯齿 paint.setAntiAlias(true); //设置画笔的颜色 paint.setColor(Color.RED); //设置画笔 填充是空心的 paint.setStyle(Paint.Style.STROKE); } public void start(){ new Thread(new Runnable() { @Override public void run() { while (true){ if(progress >= 360){ return; } progress += 10 ; //子线程刷新 系统调用onDraw() 方法 postInvalidate(); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // getWidth() 获取当前View 的宽度 int x = getWidth() / 2 ; int y = getHeight() / 2 ; int radius = 200 ; //设置画笔的粗细 paint.setStrokeWidth(30); //定义一个区域 RectF rectF = new RectF(x-radius,y-radius,x+radius,y+radius); //画弧 canvas.drawArc(rectF,-90,progress,false,paint); int text = (int) ((float)progress / 360 * 100 ); float textWidth = paint.measureText(text+"%"); Rect rextText = new Rect(); paint.getTextBounds(text+"%",0,(text+"%").length(),rextText); paint.setTextSize(30); paint.setStrokeWidth(1); //画文字 canvas.drawText(text+"%",x-textWidth/2,y+rextText.height()/2,paint); if(progress == 360 ){ Intent intent=new Intent(context,CaptureActivity.class); context.startActivity(intent); } } }
主函数布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="shidongliang.bwei.com.zhoukaodemo02.MainActivity"> <shidongliang.bwei.com.zhoukaodemo02.TitleView android:id="@+id/titleview_id" android:layout_width="match_parent" android:layout_height="wrap_content"> </shidongliang.bwei.com.zhoukaodemo02.TitleView> <shidongliang.bwei.com.zhoukaodemo02.view.CustomProgess android:id="@+id/custom_path" android:layout_below="@+id/titleview_id" android:layout_width="match_parent" android:layout_height="match_parent" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btn_id" android:text="扫描二维码" /> </RelativeLayout>自定标题布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/left_btn"android:layout_width="50dp"android:layout_height="wrap_content"android:text="返回"/><TextViewandroid:layout_weight="1"android:gravity="center"android:text="那些花儿"android:layout_width="0dp"android:layout_height="wrap_content" /><Buttonandroid:id="@+id/right_btn"android:layout_width="50dp"android:layout_height="wrap_content"android:text="进入"/></LinearLayout>
相关文章推荐
- Android自定义webView头部进度加载效果
- Android 自定义View修炼-仿360手机卫士波浪球进度的实现
- Android 自定义view和属性动画实现充电进度条效果
- android 自定义标题文件
- Android:自定义进度条
- Android view自定义实现动态进度条
- Android 圆弧形进度条 自定义View
- android 自定义view+属性动画实现充电进度条
- Android自定义进度条-带文本(文字进度)的水平进度条(ProgressBar)
- Android那些事儿之自定义进度条
- android 自定义水平进度条
- android自定义标题不能填满父控件处理方式
- Android中自定义SeekBar背景颜色,进度条颜色,滑块图片
- Android自定义View之仿京东售后审核进度
- Android 自定义 View 圆形进度条总结
- 分享:Android之自定义标题
- Android 自定义SeekBar显示进度百分比
- android自定义View实现图片上传进度显示(仿手机QQ上传效果)
- Android开发 自定义动态进度圆环
- Android自定义进度条