前言:前面写了一篇reactnative的学习笔记,说reactnative的android框架中有很多福利,确实是的,也说到了我们app中的一个把图片保存到相册的功能,好吧,还是准备写一篇博客,就当笔记了~
先上几张app的图片:
一进app就是一个进度条加载图片(我待会也会说一下进度条view跟怎么监听图片加载过程):
图片加载完毕后:
长按图片进入相册可以看到我们保存的图片:
监听图片加载的loaddingview源码(不是很难,我就直接贴代码了):
package com.leo.camerroll;
import android.animation.ValueAnimator;
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.TypedValue;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.LinearInterpolator;
import android.widget.ProgressBar;
/**
* Created by leo on 17/1/22.
*/
public class LoadingView extends ProgressBar {
private final int DEFAULT_RADIUS = dp2px(15);
private final int DEFAULT_REACH_COLOR = 0XFFFFFFFF;
private final int DEFAULT_UNREACH_COLOR = 0X88000000;
private final long ANIM_DURATION = 1000;
private final String BASE_TEXT = "00%";
private boolean isStop;
private int mRadius = DEFAULT_RADIUS;
private int mStrokeWidth;
private Paint reachPaint;
private Paint unreachPaint;
private Paint textPaint;
private Paint bgPaint;
private int mStartAngle=0;
private float mSweepAngle=360*0.382f;
private ValueAnimator anim;
public LoadingView(Context context) {
this(context, null);
}
public LoadingView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public LoadingView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
private void initView() {
reachPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
reachPaint.setStrokeCap(Paint.Cap.ROUND);
reachPaint.setStyle(Paint.Style.STROKE);
unreachPaint = new Paint(reachPaint);
reachPaint.setColor(DEFAULT_REACH_COLOR);
unreachPaint.setColor(DEFAULT_UNREACH_COLOR);
textPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
textPaint.setStyle(Paint.Style.STROKE);
textPaint.setColor(Color.WHITE);
textPaint.setFakeBoldText(true);
bgPaint=new Paint(Paint.ANTI_ALIAS_FLAG|Paint.DITHER_FLAG);
bgPaint.setStrokeCap(Paint.Cap.ROUND);
bgPaint.setColor(Color.argb(44,0,0,0));
setMax(100);
}
@Override
protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int defWidth = resolveSize(getSuggestedMinimumWidth(), widthMeasureSpec);
int defHeight = resolveSize(getSuggestedMinimumHeight(), heightMeasureSpec);
int expectSize = Math.min(defHeight, defWidth);
if (expectSize <= 0) {
expectSize = mRadius * 2;
} else {
mRadius = expectSize / 2;
}
mStrokeWidth = mRadius / 5;
reachPaint.setStrokeWidth(mStrokeWidth);
unreachPaint.setStrokeWidth(mStrokeWidth);
setMeasuredDimension(expectSize, expectSiz