97 lines
3.4 KiB
Plaintext
97 lines
3.4 KiB
Plaintext
package com.novelbook.android.view.animation;
|
|
|
|
import android.graphics.Bitmap;
|
|
import android.graphics.Canvas;
|
|
import android.graphics.Rect;
|
|
import android.graphics.drawable.GradientDrawable;
|
|
import android.util.Log;
|
|
import android.widget.Scroller;
|
|
|
|
|
|
public class CoverAnimation extends AnimationProvider {
|
|
|
|
private Rect mSrcRect, mDestRect;
|
|
private GradientDrawable mBackShadowDrawableLR;
|
|
|
|
public CoverAnimation(Bitmap mCurrentBitmap, Bitmap mNextBitmap, int width, int height) {
|
|
super(mCurrentBitmap, mNextBitmap, width, height);
|
|
mSrcRect = new Rect(0, 0, mScreenWidth, mScreenHeight);
|
|
mDestRect = new Rect(0, 0, mScreenWidth, mScreenHeight);
|
|
int[] mBackShadowColors = new int[] { 0x66000000,0x00000000};
|
|
mBackShadowDrawableLR = new GradientDrawable(
|
|
GradientDrawable.Orientation.LEFT_RIGHT, mBackShadowColors);
|
|
mBackShadowDrawableLR.setGradientType(GradientDrawable.LINEAR_GRADIENT);
|
|
}
|
|
|
|
@Override
|
|
public void drawMove(Canvas canvas) {
|
|
if (getDirection().equals(AnimationProvider.Direction.next)){
|
|
// mSrcRect.left = (int) ( - (mScreenWidth - mTouch.x));
|
|
// mSrcRect.right = mSrcRect.left + mScreenWidth;
|
|
int dis = (int) (mScreenWidth - myStartX + mTouch.x);
|
|
if (dis > mScreenWidth){
|
|
dis = mScreenWidth;
|
|
}
|
|
//计算bitmap截取的区域
|
|
mSrcRect.left = mScreenWidth - dis;
|
|
//计算bitmap在canvas显示的区域
|
|
mDestRect.right = dis;
|
|
canvas.drawBitmap(mNextPageBitmap,0,0,null);
|
|
canvas.drawBitmap(mCurPageBitmap,mSrcRect,mDestRect,null);
|
|
addShadow(dis,canvas);
|
|
}else{
|
|
mSrcRect.left = (int) (mScreenWidth - mTouch.x);
|
|
mDestRect.right = (int) mTouch.x;
|
|
canvas.drawBitmap(mCurPageBitmap,0,0,null);
|
|
canvas.drawBitmap(mNextPageBitmap,mSrcRect,mDestRect,null);
|
|
addShadow((int) mTouch.x,canvas);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void drawStatic(Canvas canvas) {
|
|
if (getCancel()){
|
|
canvas.drawBitmap(mCurPageBitmap, 0, 0, null);
|
|
}else {
|
|
canvas.drawBitmap(mNextPageBitmap, 0, 0, null);
|
|
}
|
|
}
|
|
|
|
//添加阴影
|
|
public void addShadow(int left,Canvas canvas) {
|
|
mBackShadowDrawableLR.setBounds(left, 0, left + 30 , mScreenHeight);
|
|
mBackShadowDrawableLR.draw(canvas);
|
|
}
|
|
|
|
@Override
|
|
public void startAnimation(Scroller scroller) {
|
|
|
|
int dx = 0;
|
|
if (getDirection().equals(Direction.next)){
|
|
if (getCancel()){
|
|
int dis = (int) ((mScreenWidth - myStartX) + mTouch.x);
|
|
if (dis > mScreenWidth){
|
|
dis = mScreenWidth;
|
|
}
|
|
dx = mScreenWidth - dis;
|
|
}else{
|
|
// dx = (int) - (mTouch.x + myStartX);
|
|
dx = (int) - (mTouch.x + (mScreenWidth - myStartX));
|
|
}
|
|
}else{
|
|
if (getCancel()){
|
|
dx = (int) - mTouch.x;
|
|
}else{
|
|
dx = (int) (mScreenWidth - mTouch.x);
|
|
}
|
|
}
|
|
//滑动速度保持一致
|
|
int duration = (duation * Math.abs(dx)) / mScreenWidth;
|
|
Log.e("duration",duration + "");
|
|
scroller.startScroll((int) mTouch.x, 0, dx, 0, duration);
|
|
|
|
Log.d("pageAnimation", "startAnimation: annimaiton is end");
|
|
}
|
|
|
|
}
|