广告
返回顶部
首页 > 资讯 > 移动开发 >android中图片翻页效果简单的实现方法
  • 653
分享到

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

方法图片Android 2022-06-06 10:06:52 653人浏览 薄情痞子
摘要

代码如下:public class PageWidget extends View {    private Bitmap foreImage;

代码如下:
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);
       
//      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);
    }


   
    private void drawForceImage(Canvas canvas) {
        // TODO Auto-generated method stub
        Paint mPaint = new Paint();
        if (foreImage!=null) {
            canvas.drawBitmap(foreImage, 0, 0, mPaint);
        }       
    }


   
    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();
        }
    }


   
    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);
            //对折处画右侧阴影
     &n bsp;      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);
    };
}

您可能感兴趣的文章:Android 中使用RecyclerView实现底部翻页解析Android中实现滑动翻页之ViewFlipper的使用详解Android实现阅读APP平移翻页效果android ViewPager实现滑动翻页效果实例代码Android自定义左右或上下滑动翻页效果基于Android实现3D翻页效果Android ViewPager实现左右滑动翻页效果Android利用悬浮按钮实现翻页效果Android 仿日历翻页、仿htc时钟翻页、数字翻页切换效果Android通过手势实现答题器翻页效果RecyclerView+PagerSnapHelper实现抖音首页翻页的Viewpager效果


--结束END--

本文标题: android中图片翻页效果简单的实现方法

本文链接: https://www.lsjlt.com/news/27704.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • android中图片翻页效果简单的实现方法
    代码如下:public class PageWidget extends View {    private Bitmap foreImage;...
    99+
    2022-06-06
    方法 图片 Android
  • Android实现简单的分页效果
    本文实例为大家分享了Android分页效果的具体代码,供大家参考,具体内容如下 1.实现分页最主要的就是封装分页代码,然后在按钮里实现相关的操作 public class ...
    99+
    2022-06-06
    分页 Android
  • Android实现简单图片压缩的方法
    本文实例讲述了Android实现简单图片压缩的方法。分享给大家供大家参考,具体如下: 在开发图片浏览器等软件是,很多时候要显示图片的缩略图,而一般情况下,我们要将图片按照固定大...
    99+
    2022-06-06
    压缩 方法 图片 图片压缩 Android
  • 纯CSS实现图片左右翻转效果的方法
    这篇“纯CSS实现图片左右翻转效果的方法”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“纯CSS实现图片左右翻转效果的方法”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来...
    99+
    2023-06-06
  • Android编程单击图片实现切换效果的方法
    本文实例讲述了Android编程单击图片实现切换效果的方法。分享给大家供大家参考,具体如下: 新建一个Android项目,命名为FrameLayout 此实例主要操作src文件...
    99+
    2022-06-06
    方法 图片 Android
  • Android实现图片阴影效果的方法
    本文实例介绍了Android实现图片阴影效果,设置画布颜色,图像倾斜效果,图片阴影效果的方法,采用canvas.save(Canvas.MATRIX_SAVE_FLAG);来实...
    99+
    2022-06-06
    方法 图片 Android
  • Android实现图片轮播效果的两种方法
    大家在使用APP的过程中,经常会看到上部banner图片轮播的效果,那么今天我们就一起来学习一下,android中图片轮询的几种实现方法: 第一种:使用动画的方法实现:(代码繁...
    99+
    2022-06-06
    方法 图片 轮播 Android
  • Android实现图片叠加效果的两种方法
    本文实例讲述了Android实现图片叠加效果的两种方法。分享给大家供大家参考,具体如下: 效果图: 第一种: 第二种: 第一种是通过canvas画出来的效果: publi...
    99+
    2022-06-06
    方法 图片 Android
  • css3怎么实现图片的简单阴影效果
    这篇文章将为大家详细讲解有关css3怎么实现图片的简单阴影效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   使用css3实现图片的阴影效果的原理   一个图形需...
    99+
    2022-10-19
  • android中知道图片name时获取图片的简单方法
    1. 图片放在sdcard中, 代码如下:  Bitmap imageBitmap = BitmapFactory.decodeFile(path)  (path 是...
    99+
    2022-06-06
    方法 Android
  • Android使用Recyclerview实现图片轮播效果的方法
    这篇文章将为大家详细讲解有关Android使用Recyclerview实现图片轮播效果的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。效果图:思路:准备m张图片使用Recyclerview实现,返回无...
    99+
    2023-05-30
    android recyclerview 滚动效果
  • JS实现轮播图效果的3种简单方法
    本文实例为大家分享了3种方法实现JS轮播图效果的具体代码,供大家参考,具体内容如下 Js实现轮播图01 实现思路 这可能是轮播图最简单点的实现之一,通过更改图片的src来实现该效果,...
    99+
    2022-11-12
  • html中翻转效果的实现方法
    小编给大家分享一下html中翻转效果的实现方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!html翻转效果的实现方法:首先将两个要展示的图片利用定位重叠在一起;...
    99+
    2023-06-15
  • css+filter如何实现简单的图片透明效果
    这篇文章给大家分享的是有关css+filter如何实现简单的图片透明效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。完成简单的透明度控制功能使用filter的功能对图片元素进行...
    99+
    2022-10-19
  • 如何通过纯CSS实现图片的翻转效果的方法和技巧
    前言:在Web开发中,我们经常需要为网页添加一些动画效果来增加用户体验。图片的翻转效果是其中一个常见的效果之一。通过纯CSS来实现图片的翻转不仅简单方便,还可以避免使用JavaScript等其他语言带来的额外开销。本文将介绍如何通过纯CSS...
    99+
    2023-10-21
    CSS 图片 翻转
  • iOS简单抽屉效果的实现方法
    本文实例为大家分享了iOS实现简单抽屉效果的具体代码,供大家参考,具体内容如下 实现思路及步骤: 1、首先准备要滑动的view #warning 第一步 - (void)addChi...
    99+
    2022-11-13
    iOS 抽屉
  • 利用CSS实现卡片翻转效果的方法和示例
    在现代的网页设计中,翻转效果是一种常见且炫酷的特效,可以为网页增添一份动感和交互性。利用CSS的转换属性和动画属性,我们可以轻松地实现卡片的翻转效果。本文将介绍一种基础的卡片翻转效果,并提供具体的代码示例供读者参考。卡片翻转效果是指将卡片从...
    99+
    2023-10-21
    CSS 卡片翻转 方法和示例
  • Android卫星菜单效果的实现方法
    Android小白第一次写博客,心情无比激动。下面给大家展示一下卫星菜单的实现。1.简单介绍卫星菜单在应用程序中,有很多展示菜单的方式,但其功能都是大同小异,这样一来,菜单的美观以及展示方式就显的尤为重要,卫星菜单就是很不错的一种。下面是本...
    99+
    2023-05-31
    android 卫星菜单 roi
  • Android实现跑马灯效果的两种简单方式
    第一种:较简单,但是局限性强,貌似只能从右至左跑,且有一个要求:字体的长度需大于控件的长度, 不然没有效果,重要的代码为深色部分,具体代码在文章最后。 重要代码的介绍 1. and...
    99+
    2022-11-12
  • Android编程实现ImageView图片抛物线动画效果的方法
    本文实例讲述了Android编程实现ImageView图片抛物线动画效果的方法。分享给大家供大家参考,具体如下: 想实现抛物线动画,必须知道抛物线的方程,这时候数学其作用了,假...
    99+
    2022-06-06
    方法 抛物线 动画 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作