private RectF mRect = new RectF();
private Point mCircleCenter;
private float mRadius;
private int mStartColor;
private int mEndColor;
private LinearGradient mLinearGradient;
/**
- 显示图片还是显示色值
*/
private boolean mIsShowImage = true;
public PerfectArcView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
readAttr(attrs);
init();
}
private void init() {
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
mPaint = new Paint();
mPaint.setColor(Color.WHITE);
mPaint.setStyle(Paint.Style.FILL);
mPaint.setAntiAlias(true);
// mBitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.splash);
mCircleCenter = new Point();
}
private void readAttr(AttributeSet set) {
TypedArray typedArray = getContext().obtainStyledAttributes(set, R.styleable.PerfectArcView);
mStartColor = typedArray.getColor(R.styleable.PerfectArcView_p_arc_startColor, Color.parseColor(“#FF3A80”));
mEndColor = typedArray.getColor(R.styleable.PerfectArcView_p_arc_endColor, Color.parseColor(“#FF3745”));
mIsShowImage = typedArray.getBoolean(R.styleable.PerfectArcView_p_arc_showImage, false);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mHeight = getHeight();
int width = getWidth();
mWidth = width;
// 半径
mRadius = width * 2;
// 矩形
mRect.left = 0;
mRect.top = 0;
mRect.right = width;
mRect.bottom = mHeight;
// 圆心坐标
mCircleCenter.x = width / 2;
mCircleCenter.y = mHeight - width * 2;
mLinearGradient = new LinearGradient(width / 2, 0, width / 2, mHeight, mStartColor, mEndColor, Shader.TileMode.MIRROR);
}
/**
- 加载网络图片
- @param url
*/
public void setImageUrl(String url) {
Picasso.with(getContext()).load(url).into(this);
}
/**
- @param startColor
- @param endColor
*/
public void setColor(@ColorInt int startColor, @ColorInt int endColor) {
mStartColor = startColor;
mEndColor = endColor;
mIsShowImage = false;
mLinearGradient = new LinearGradient(mWidth / 2, 0, mWidth / 2, mHeight, mStartColor, mEndColor, Shader.TileMode.MIRROR);
invalidate();
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onDraw(Canvas canvas) {
int canvasWidth = canvas.getWidth();
int canvasHeight = canvas.getHeight();
int layerId = canvas.saveLayer(0, 0, canvasWidth, canvasHeight, null, Canvas.ALL_SAVE_FLAG);
canvas.drawCircle(mCircleCenter.x, mCircleCenter.y, mRadius, mPaint);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
if (mIsShowImage) {
if (mBitmap != null) {
canvas.drawBitmap(mBitmap, null, mRect, mPaint);
}
} else {
mPaint.setShader(mLinearGradient);//绘制渐变色
canvas.drawRect(mRect, mPaint);
}
mPaint.setXfermode(null);
canvas.restoreToCount(layerId);
}
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Log.e(“TAG”, “onBitmapLoaded…”);
mBitmap = bitmap;
invalidate();
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
Log.e(“TAG”, “onBitmapFailed…”);
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
Log.e(“TAG”, “onPrepareLoad…”);
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
最后
我见过很多技术leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了7、8年,还是每天重复给业务部门写代码,工作内容的重复性比较高,没有什么技术含量的工作。问到这些人的职业规划时,他们也没有太多想法。
其实30岁到40岁是一个人职业发展的黄金阶段,一定要在业务范围内的扩张,技术广度和深度提升上有自己的计划,才有助于在职业发展上有持续的发展路径,而不至于停滞不前。
不断奔跑,你就知道学习的意义所在!
以上进阶BATJ大厂学习资料可以免费分享给大家,需要完整版的朋友,【点这里可以看到全部内容】。
有持续的发展路径,而不至于停滞不前。
不断奔跑,你就知道学习的意义所在!
以上进阶BATJ大厂学习资料可以免费分享给大家,需要完整版的朋友,【点这里可以看到全部内容】。