Skip to content

Commit

Permalink
release v1.0.3
Browse files Browse the repository at this point in the history
  • Loading branch information
codeestX committed Dec 7, 2016
1 parent afc7d47 commit 52a2b3b
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 36 deletions.
127 changes: 93 additions & 34 deletions library/src/main/java/moe/codeest/enviews/ENLoadingView.java
Original file line number Diff line number Diff line change
@@ -1,55 +1,67 @@
package moe.codeest.enviews;

import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PixelFormat;
import android.graphics.PorterDuffXfermode;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.LinearInterpolator;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

/**
* Created by codeest on 2016/11/15.
*
* 我还在好奇里面装的究竟是啤酒还是橙汁 0v0
*/

public class ENLoadingView extends View {
public class ENLoadingView extends SurfaceView {

private static final int STATE_SHOW = 0;

private static final int STATE_HIDE = 1;

private static final int DEFAULT_RIPPLE_SPEED = 2;

private static final float DEFAULT_MOVE_SPEED = 0.01f;

private Paint mPaint[], mBeerPaint[], mBubblePaint[];

private Path mPath, mBgPath;

private ValueAnimator valueAnim;
private Thread mThread;

private boolean isItemReady[];

private float mCurrentRippleX[];

private float mFraction[];

private float mTemp = 0;

private int mCurrentState;

private float mWidth, mHeight;

private float mCenterX, mCenterY;

private float mBaseLength;
private float mBgBaseLength;
private float mCurrentRippleX[];
private SurfaceHolder surfaceHolder;

private float mBaseLength, mBgBaseLength;

public ENLoadingView(Context context) {
super(context);
init();
}

public ENLoadingView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}

private void init() {
mPaint = new Paint[4];
mBeerPaint = new Paint[4];
mBubblePaint = new Paint[4];
Expand All @@ -58,6 +70,7 @@ public ENLoadingView(Context context, AttributeSet attrs) {
isItemReady = new boolean[4];
mFraction = new float[4];
mCurrentRippleX = new float[4];
mCurrentState = STATE_HIDE;

for (int i = 0; i< 4 ; i++) {
mPaint[i] = new Paint(Paint.ANTI_ALIAS_FLAG);
Expand All @@ -75,29 +88,28 @@ public ENLoadingView(Context context, AttributeSet attrs) {
mBubblePaint[i].setStyle(Paint.Style.FILL);
mBubblePaint[i].setColor(Color.parseColor("#f5fba1"));
}
surfaceHolder = getHolder();
setZOrderOnTop(true);
surfaceHolder.setFormat(PixelFormat.TRANSLUCENT);
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {

}

@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {

}

valueAnim = ValueAnimator.ofFloat(1.f, 100.f);
valueAnim.setDuration(3000);
valueAnim.setInterpolator(new LinearInterpolator());
valueAnim.setRepeatCount(ValueAnimator.INFINITE);
valueAnim.setRepeatMode(ValueAnimator.RESTART);
valueAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
for (int i = 0;i < 4 ; i++) {
float temp = valueAnimator.getAnimatedFraction() - i * 0.25f;
if (temp < 0)
temp += 1;
mFraction[i] = temp;
if (mFraction[0] > i * 0.25f && !isItemReady[i]) {
isItemReady[i] = true;
}
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
if (mThread != null) {
mThread.interrupt();
mThread = null;
}
invalidate();
}
});

mCurrentState = STATE_HIDE;
}

@Override
Expand All @@ -123,16 +135,52 @@ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
mPath.lineTo(mBaseLength, mCenterY);
mPath.lineTo(mBaseLength, mCenterY + 2 * mBaseLength);
mPath.close();
}

private Runnable animRunnable = new Runnable() {
@Override
public void run() {
try {
while (mCurrentState == STATE_SHOW) {
Thread.sleep(5);
flush();
draw();
}
if (mCurrentState == STATE_HIDE) {
clearCanvas();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};

setAlpha(0);
private void flush() {
if (mTemp >= 1)
mTemp = 0;
mTemp += DEFAULT_MOVE_SPEED;
for (int i = 0;i < 4 ; i++) {
float temp = mTemp - i * 0.25f;
if (temp < 0)
temp += 1;
mFraction[i] = temp;
if (mFraction[0] > i * 0.25f && !isItemReady[i]) {
isItemReady[i] = true;
}
}
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
private void draw() {
Canvas canvas = surfaceHolder.lockCanvas();
if(canvas == null)
return;
mPaint[0].setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.CLEAR)); //使用这只画笔清屏,清屏后恢复画笔
canvas.drawPaint(mPaint[0]);
mPaint[0].setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.DST_OVER));
for (int i = 0; i < 4 ; i++) {
drawItem(canvas, mFraction[i], i);
}
surfaceHolder.unlockCanvasAndPost(canvas);
}

private void drawItem(Canvas canvas, float mFraction, int index) {
Expand Down Expand Up @@ -198,24 +246,35 @@ public void show() {
return;
}
mCurrentState = STATE_SHOW;
this.animate().alpha(1).setDuration(200).start();
valueAnim.start();
mThread = new Thread(animRunnable);
mThread.start();
}

public void hide() {
if (mCurrentState == STATE_HIDE) {
return;
}
mCurrentState = STATE_HIDE;
this.animate().alpha(0).setDuration(200).start();
valueAnim.cancel();
resetData();
}

private void clearCanvas() {
Canvas canvas = surfaceHolder.lockCanvas();
if(canvas == null)
return;
mPaint[0].setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.CLEAR));
canvas.drawPaint(mPaint[0]);
mPaint[0].setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.DST_OVER));
surfaceHolder.unlockCanvasAndPost(canvas);
mThread.interrupt();
mThread = null;
}

private void resetData() {
for (int i = 0; i<4 ; i++) {
isItemReady[i] = false;
mCurrentRippleX[i] = - 2 * mBgBaseLength;
}
mTemp = 0;
}
}
4 changes: 2 additions & 2 deletions library/src/main/java/moe/codeest/enviews/ENVolumeView.java
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ protected void onDraw(Canvas canvas) {
canvas.drawPath(mDstPath, mPaint);

canvas.save(); //嗷~ 在这画小声波
canvas.translate( - (1 - mFraction) * mBaseLength / 3, 0);
canvas.translate( - (1 - mFraction) * mBaseLength / 5 * 2 * mVolumeValue / 100, 0);
canvas.drawArc(mCenterX - 1.5f * mBaseLength,
mCenterY - mBaseLength,
mCenterX + 0.5f * mBaseLength,
Expand All @@ -211,7 +211,7 @@ protected void onDraw(Canvas canvas) {
canvas.restore();

canvas.save(); //嗷~ 在这画大声波
canvas.translate( - (1 - mFraction) * mBaseLength / 3, 0);
canvas.translate( - (1 - mFraction) * mBaseLength / 5 * 2 * mVolumeValue / 100, 0);
canvas.drawArc(mCenterX - 1.6f * mBaseLength,
mCenterY - 1.6f * mBaseLength,
mCenterX + 1.6f * mBaseLength,
Expand Down

0 comments on commit 52a2b3b

Please sign in to comment.