自定义View(环形下载,球形下载)
来源:互联网 发布:ajax接收不到json数据 编辑:程序博客网 时间:2024/06/06 04:22
效果图:
代码:
这里的layout就不写了,注意view要写全称,包名类名都要写
环形下载:
MyArc
package com.example.administrator.mywidgetmode.Progress;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.util.Log;import android.view.View;import java.text.SimpleDateFormat;import java.util.Date;import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Align;import android.graphics.Paint.Style;import android.graphics.Rect;import android.graphics.RectF;import android.util.AttributeSet;import android.view.View;/** * Created by Administrator on 2015/9/16. */public class MyArc extends View { private int width; private int height; private int currentProgress; private Paint mPaintBackGround; private Paint mPaintCurrent; private Paint mPaintText; private int maxProgress=100; //得到进度的最大值 public int getMaxProgress() { return maxProgress; } //设置进度的最大值 public void setMaxProgress(int maxProgress) { this.maxProgress = maxProgress; } //得到当前的进度值 public int getCurrentProgress(){ return currentProgress; } //设置当前的进度值 public void setCurrentProgress(int currentProgress){ this.currentProgress=currentProgress; invalidate();//刷新 } public MyArc(Context context) { super(context); } public MyArc(Context context, AttributeSet attrs) { super(context, attrs); mPaintBackGround=new Paint(); mPaintBackGround.setColor(Color.CYAN); mPaintBackGround.setAntiAlias(true);//消除锯齿 mPaintCurrent=new Paint(); mPaintCurrent.setColor(Color.GREEN); mPaintCurrent.setAntiAlias(true); mPaintCurrent.setStyle(Paint.Style.STROKE); mPaintCurrent.setStrokeWidth(20); mPaintText=new Paint(); mPaintText.setColor(Color.BLACK); mPaintText.setTextSize(40); mPaintText.setTextAlign(Paint.Align.CENTER); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); width=getDefaultSize(getSuggestedMinimumWidth(),widthMeasureSpec); height=getDefaultSize(getSuggestedMinimumHeight(),heightMeasureSpec); setMeasuredDimension(width,height);//设置画布的大小,长和宽 } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(Color.GRAY);//设置画布颜色 RectF oval=new RectF(); //RectF对象 oval.left=width/4; //左边 oval.top=width/4; //上边 oval.right=width/4*3; //右边 oval.bottom=width/4*3; //下边 canvas.drawArc(oval,225, 360*currentProgress/maxProgress,false,mPaintCurrent); canvas.drawText(currentProgress+"%",width/2,width/2,mPaintText); }}
MyArcActivity
package com.example.administrator.mywidgetmode.Progress;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;import com.example.administrator.mywidgetmode.R;/** * Created by Administrator on 2015/9/16. */public class MyArcActivity extends AppCompatActivity{ private MyArc myArc; private static final int PROGRESS=0x23; private Button mBtStart; private int progress; private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case PROGRESS: progress++; if(progress<=100){ myArc.setCurrentProgress(progress); handler.sendEmptyMessageDelayed(PROGRESS,200); } break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_arc); myArc= (MyArc) findViewById(R.id.arc); mBtStart= (Button) findViewById(R.id.button_arc_download); mBtStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { handler.sendEmptyMessageDelayed(PROGRESS, 1000); } }); }}
球形下载:
MyPathViewTwo
package com.example.administrator.mywidgetmode.PathView;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;import android.os.Handler;import android.os.Message;import android.util.AttributeSet;import android.view.View;/** * Created by Administrator on 2015/9/18. */public class MyPathViewTwo extends View { private int width; private int height; private Paint mPaintText; private Paint mPaint; private Paint mPaintPoint; private Path path; private int currentProgress; private int maxProgress = 100; private int count=0; private boolean isAdd=false; private int size; public static final int NEED_INVALIDATE=0X23; private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case NEED_INVALIDATE: count+=5; if(count>80){ count=0; } invalidate();//告诉主线程重新绘制 handler.sendEmptyMessageDelayed(NEED_INVALIDATE,100); break; } } }; public int getCurrentProgress() { return currentProgress; } public void setCurrentProgress(int currentProgress) { this.currentProgress = currentProgress; } public MyPathViewTwo(Context context) { super(context); } public MyPathViewTwo(Context context, AttributeSet attrs) { super(context, attrs); path = new Path();//路径 //文字画笔 mPaintText = new Paint(); mPaintText.setAntiAlias(true);//消除锯齿 mPaintText.setColor(Color.BLACK); mPaintText.setTextSize(50); mPaintText.setTextAlign(Paint.Align.CENTER); mPaint=new Paint(); mPaint.setColor(Color.RED);//下半部分 mPaint.setStyle(Paint.Style.FILL); mPaint.setTextSize(50); mPaint.setAntiAlias(true); mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP)); mPaintPoint=new Paint(); mPaintPoint.setColor(Color.argb(0xFF,0xF8,0xA6,0xA6));//上半部分 mPaintPoint.setStrokeWidth(10); mPaintPoint.setStyle(Paint.Style.FILL); handler.sendEmptyMessage(NEED_INVALIDATE); } private Bitmap mBitmapBubble; private Canvas mCanvasBit; @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec); height = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec); setMeasuredDimension(width, height);//设置画布的大小,长和宽 mBitmapBubble=Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888); mCanvasBit=new Canvas(mBitmapBubble); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mCanvasBit.drawCircle(300,300,150,mPaintPoint);//圆 path.reset();//刷新 path.moveTo(500,450-currentProgress*3); path.lineTo(500,500); path.lineTo(count,500); path.lineTo(count,450-currentProgress*3); for(int i=0;i<10;i++){ path.rQuadTo(20,7,40,0); path.rQuadTo(20,-7,40,0); } path.close(); mCanvasBit.drawPath(path, mPaint); canvas.drawBitmap(mBitmapBubble, 0, 0, null); canvas.drawText(currentProgress + "%", 300, 300, mPaintText); }}
MyPathViewTwoActivity
package com.example.administrator.mywidgetmode.PathView;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;import com.example.administrator.mywidgetmode.Progress.MyRectangle;import com.example.administrator.mywidgetmode.R;/** * Created by Administrator on 2015/9/18. */public class MyPathViewTwoActivity extends AppCompatActivity { private MyPathViewTwo myPathViewTwo; private static final int PROGRESS=0x23; private Button mBtStart; private int progress; private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case PROGRESS: progress++; if(progress<=100){ myPathViewTwo.setCurrentProgress(progress); handler.sendEmptyMessageDelayed(PROGRESS,200); } break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pathview_two); myPathViewTwo= (MyPathViewTwo) findViewById(R.id.myPathViewTwo); mBtStart= (Button) findViewById(R.id.button_myPathViewTwo); mBtStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { handler.sendEmptyMessageDelayed(PROGRESS,1000); } }); }}
0 0
- 自定义View(环形下载,球形下载)
- Android自定义View绘制圆形、方形、弧形、球形四种形态的模仿下载进度条
- 自定义view-环形进度条
- 自定义view-环形进度条
- 自定义View环形递增
- 自定义view下载进度条展示
- 自定义View实现环形SeekBar
- 自定义View实现环形SeekBar
- Android自定义view之下载控件,ProgressBar
- 自定义view实现下载进度button
- 仿微信视频下载进度自定义View
- 自定义View模拟下载/加载动态progress
- 自定义View(使用canvas画圆,线,矩形[钟表,圆形下载,矩形下载,弧形下载])
- Android自定义View---模拟球形动态加速球
- 仿360手机卫士的自定义波浪球形进度View
- Android自定义View之实现环形进度条
- 自定义View——环形进度条
- 自定义View---实现半圆环形进度条
- 我的WebUtil工具类--获取IP与发送http请求
- 数据库系统概论学习笔记---关系的俩个完整性
- Android四大组件
- border-radius 画圆
- Best Time to Buy and Sell Stock III
- 自定义View(环形下载,球形下载)
- [BZOJ 1597] Usaco2008 Mar 土地购买 · 斜率优化DP
- Binary Tree Level Order Traversal
- WAMP的MySQL 笔记
- 弄明白Android 接口回调机制
- android下载图片显示总结
- 缺乏专利!小米智能家居能走多远
- ORACLE数据库性能优化之-->内存磁盘
- 远程推送