pda/zhuike/.svn/pristine/af/afb5937f4613c5eeae84b3b7609...

97 lines
3.4 KiB
Plaintext
Raw Normal View History

2024-02-06 22:23:29 +08:00
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");
}
}