源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

android中图片翻页效果简单的实现方法

  • 时间:2021-04-01 10:08 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:android中图片翻页效果简单的实现方法
[u]复制代码[/u] 代码如下:
public class PageWidget extends View {     private Bitmap foreImage;     private Bitmap bgImage;     private PointF touchPt;     private int screenWidth;     private int screenHeight;     private GradientDrawable shadowDrawableRL;     private GradientDrawable shadowDrawableLR;     private ColorMatrixColorFilter mColorMatrixFilter;     private Scroller mScroller;     private int lastTouchX;     public PageWidget(Context context) {         super(context);         // TODO Auto-generated constructor stub         touchPt = new PointF(-1,-1);         //ARGB A(0-透明,255-不透明)         int[] color = { 0xb0333333 ,0x00333333};         shadowDrawableRL = new GradientDrawable(GradientDrawable.Orientation.RIGHT_LEFT, color);         shadowDrawableRL.setGradientType(GradientDrawable.LINEAR_GRADIENT);         shadowDrawableLR = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, color);         shadowDrawableLR.setGradientType(GradientDrawable.LINEAR_GRADIENT);          float array[] = { 0.55f,    0,    0,     0, 80.0f,     ,0.55f,    0,     0, 80.0f,     ,    0,0.55f,     0, 80.0f,     ,    0,    0,  0.2f, 0};         ColorMatrix cm = new ColorMatrix();         cm.set(array);         /*          * |A*0.55 + 80|          * |R*0.55 + 80|          * |G*0.55 + 80|          * |B*0.2|          */ //      cm.setSaturation(0);         mColorMatrixFilter = new ColorMatrixColorFilter(cm);         //利用滚动条来实现接触点放开后的动画效果         mScroller = new Scroller(context);     }     @Override     public void computeScroll() {         // TODO Auto-generated method stub         if (mScroller.computeScrollOffset()) {             touchPt.x = mScroller.getCurrX();             touchPt.y = mScroller.getCurrY();             postInvalidate();         }         else{ //            touchPt.x = -1; //            touchPt.y = -1;                    }         super.computeScroll();     }     public void SetScreen(int screenWidth,int screenHeight){         this.screenWidth = screenWidth;         this.screenHeight = screenHeight;     }     public Bitmap getForeImage() {         return foreImage;     }     public void setForeImage(Bitmap foreImage) {         this.foreImage = foreImage;     }     public Bitmap getBgImage() {         return bgImage;     }     public void setBgImage(Bitmap bgImage) {         this.bgImage = bgImage;     }     @Override     protected void onDraw(Canvas canvas) {         // TODO Auto-generated method stub         drawPageEffect(canvas);         super.onDraw(canvas);     }     /**      * 画前景图片      * @param canvas      */     private void drawForceImage(Canvas canvas) {         // TODO Auto-generated method stub         Paint mPaint = new Paint();         if (foreImage!=null) {             canvas.drawBitmap(foreImage, 0, 0, mPaint);         }            }     /**      * 画背景图片      * @param canvas      */     private void drawBgImage(Canvas canvas,Path path) {         // TODO Auto-generated method stub         Paint mPaint = new Paint();         if (bgImage!=null) {             canvas.save();             //只在与路径相交处画图             canvas.clipPath(path,Op.INTERSECT);             canvas.drawBitmap(bgImage, 0, 0, mPaint);             canvas.restore();         }     }     /**      * 画翻页效果      * @param canvas      */     private void drawPageEffect(Canvas canvas) {         // TODO Auto-generated method stub         drawForceImage(canvas);         Paint mPaint = new Paint();         if (touchPt.x!=-1 && touchPt.y!=-1) {             //翻页左侧书边             canvas.drawLine(touchPt.x, 0, touchPt.x,screenHeight, mPaint);             //左侧书边画阴影             shadowDrawableRL.setBounds((int)touchPt.x - 20, 0 ,(int)touchPt.x, screenHeight);             shadowDrawableRL.draw(canvas);             //翻页对折处             float halfCut = touchPt.x + (screenWidth - touchPt.x)/2;             canvas.drawLine(halfCut, 0, halfCut, screenHeight, mPaint);             //对折处左侧画翻页页图片背面             Rect backArea = new Rect((int)touchPt.x,0,(int)halfCut,screenHeight);             Paint backPaint = new Paint();             backPaint.setColor(0xffdacab0);             canvas.drawRect(backArea, backPaint);             //将翻页图片正面进行处理水平翻转并平移到touchPt.x点             Paint fbPaint = new Paint();             fbPaint.setColorFilter(mColorMatrixFilter);             Matrix matrix = new Matrix();             matrix.preScale(-1,1);             matrix.postTranslate(foreImage.getWidth() + touchPt.x,0);             canvas.save();             canvas.clipRect(backArea);             canvas.drawBitmap(foreImage, matrix, fbPaint);             canvas.restore();             //对折处画左侧阴影             shadowDrawableRL.setBounds((int)halfCut - 50, 0 ,(int)halfCut, screenHeight);             shadowDrawableRL.draw(canvas);             Path bgPath = new Path();             //可以显示背景图的区域             bgPath.addRect(new RectF(halfCut,0,screenWidth,screenHeight), Direction.CW);             //对折出右侧画背景             drawBgImage(canvas,bgPath);             //对折处画右侧阴影             shadowDrawableLR.setBounds((int)halfCut, 0 ,(int)halfCut + 50, screenHeight);             shadowDrawableLR.draw(canvas);         }     }     @Override     public boolean onTouchEvent(MotionEvent event) {         // TODO Auto-generated method stub         if (event.getAction() == MotionEvent.ACTION_DOWN) {             touchPt.x = event.getX();             touchPt.y =    event.getY();         }         else if(event.getAction() == MotionEvent.ACTION_MOVE){             lastTouchX = (int)touchPt.x;             touchPt.x = event.getX();             touchPt.y =    event.getY();             postInvalidate();         }         else if(event.getAction() == MotionEvent.ACTION_UP){             int dx,dy;             dy = 0;             //向右滑动             if (lastTouchX<touchPt.x) {                 dx = foreImage.getWidth() - (int)touchPt.x + 30;             }             else{             //向左滑动                 dx = -(int)touchPt.x - foreImage.getWidth();             }             mScroller.startScroll((int)touchPt.x,(int)touchPt.y,dx,dy,1000);             postInvalidate();         }         //必须为true,否则无法获取ACTION_MOVE及ACTION_UP事件         return true;     } } public class PageActivity extends Activity {     protected void onCreate(android.os.Bundle savedInstanceState) {         requestWindowFeature(Window.FEATURE_NO_TITLE);         PageWidget pageWidget = new PageWidget(this);         Display display = getWindowManager().getDefaultDisplay();         int width  = display.getWidth();         int height = display.getHeight();         pageWidget.SetScreen(width, height);         Bitmap bm1 = BitmapFactory.decodeResource(getResources(), R.drawable.pre7);         Bitmap bm2 = BitmapFactory.decodeResource(getResources(), R.drawable.after7);         Bitmap foreImage = Bitmap.createScaledBitmap(bm1, width, height,false);         Bitmap bgImage = Bitmap.createScaledBitmap(bm2, width, height,false);         pageWidget.setBgImage(bgImage);         pageWidget.setForeImage(foreImage);         setContentView(pageWidget);         super.onCreate(savedInstanceState);     }; }
[img]http://files.jb51.net/file_images/article/201305/2013526102242260.gif[/img]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部