Android自定义实现淘宝下拉刷新效果
public class TaoBaoView extends View{
//圆环进度颜色
private int ringProgressColor;
//圆环的宽度
private float ringWidth;
//最大值
private int ringMax;
//中间的icon
private Bitmap ringImage;
//中间X坐标
private int centerX;
//中间Y坐标
private int centerY;
//画笔
private Paint mPaint;
//View宽度
private int width;
//View高度
private int height;
//进度
private int progress;
//半径
private int radius;
//是否显示图标
private boolean isShowIcon=true;
public TaoBaoView(Context context) {
this(context,null);
}
public TaoBaoView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public TaoBaoView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray typedArray=context.obtainStyledAttributes(attrs, R.styleable.TaoBaoView);
ringProgressColor=typedArray.getColor(R.styleable.TaoBaoView_ringProgressColor, Color.GRAY);
ringWidth=typedArray.getDimension(R.styleable.TaoBaoView_ringWidth, 5);
ringMax=typedArray.getInteger(R.styleable.TaoBaoView_ringmax, 50);
ringImage= BitmapFactory.decodeResource(getResources(),
typedArray.getResourceId(R.styleable.TaoBaoView_ringImage,R.mipmap.jiantou));
init();
}
private void init() {
mPaint=new Paint();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int widthMode=MeasureSpec.getMode(widthMeasureSpec);
int widthSize=MeasureSpec.getSize(widthMeasureSpec);
int heightMode=MeasureSpec.getMode(heightMeasureSpec);
int heightSize=MeasureSpec.getSize(heightMeasureSpec);
if(widthMode==MeasureSpec.AT_MOST)width=dp2px(30);
else width=widthSize;
if(heightMode==MeasureSpec.AT_MOST)height=dp2px(30);
else height=heightSize;
setMeasuredDimension(width,height);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
//获取中心点的位置
centerX=getWidth()/2;
centerY=getHeight()/2;
radius=(int) (centerX - ringWidth / 2);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
//确定View的宽高
width = w;
height = h;
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
drawProgress(canvas);
drawImage(canvas);
}
/**
* 绘制图片
* @param canvas
*/
private void drawImage(Canvas canvas) {
if(isShowIcon)
canvas.drawBitmap(ringImage,centerX-ringImage.getWidth()/2,centerY-ringImage.getHeight()/2,mPaint);
}
/**
* 绘制进度条
* @param canvas
*/
private void drawProgress(Canvas canvas) {
mPaint.setAntiAlias(true);
mPaint.setColor(ringProgressColor);
mPaint.setStrokeWidth(ringWidth);
//设置画笔样式
mPaint.setStyle(Paint.Style.STROKE);
RectF rectF=new RectF(centerX-radius,centerY-radius,centerX+radius,centerY+radius);
//绘制圆弧
canvas.drawArc(rectF,-110,-360*progress/ringMax,false,mPaint);
}
/**
* dp转px
* @param dp
* @return
*/
public int dp2px(int dp){
float density = getContext().getResources().getDisplayMetrics().density;
return (int) (dp * density + 0.5f);
}
/**
* 设置进度
* @param progress
*/
public synchronized void setProgress(int progress){
if(progress<0){
progress=0;
}
if(progress>=ringMax){
progress=ringMax;
}
this.progress=progress;
postInvalidate();
}
/**
* 设置是否显示图标
* @param isShow
*/
public synchronized void setIsShowIcon(boolean isShow){
this.isShowIcon=isShow;
}
}
- .NET Core系列之MemoryCache 初识
- 007手机一键Root(安机网一键Root) v3.0 官方最新版 一键ROOT您的Android手机
- 12306密码被盗了怎么办?12306密码外泄解决方法
- 12个字的qq网名
- 150M迷你型无线路由器怎么设置?
- 192.168.1.1打不开怎么办?路由器192.168.1.1打不开的原因以及解决办法
- 2011年电子报合订本 电子报 编辑部 中文 PDF版 [84M]
- 2015年1月15日小米新旗舰发布会现场图文直播
- 2016.3.1vivo Xplay5新品发布会现场视频直播 优酷直播
- 2016华为P9发布会视频直播地址 4月15日华为P9国行发布会直播
相关文章
- Android下如何使用百度地图sdk
- Android利用startActivityForResult返回数据到前一个Activity
- Android AlertDialog六种创建方式案例详解
- Android实现将应用崩溃信息发送给开发者并重启应用的方法
- Android开发中的Surface库及用其制作播放器UI的例子
- Android 如何使用SQLite保存数据
- Android自定义View实现LayoutParams的方法详解
- Android中Canvas的常用方法总结
- android l怎么样?安卓android l新变化及系统使用评测教程
- Android与H5交互产生Script Error踩坑解决