`
wang_peng1
  • 浏览: 3944370 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

屏幕一张张翻

 
阅读更多

class PanelSwitcher extends FrameLayout {
    private static final int MAJOR_MOVE = 60;
    private static final int ANIM_DURATION = 400;

    private GestureDetector mGestureDetector;
    private int mCurrentView;
    private View mChild, mHistoryView;
    private View children[];

    private int mWidth;
    private TranslateAnimation inLeft;
    private TranslateAnimation outLeft;

    private TranslateAnimation inRight;
    private TranslateAnimation outRight;

    private static final int NONE  = 1;
    private static final int LEFT  = 2;
    private static final int RIGHT = 3;
    private int mPreviousMove;

    public PanelSwitcher(Context context, AttributeSet attrs) {
        super(context, attrs);
        mCurrentView = 0;
        mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
                public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                                       float velocityY) {
                    int dx = (int) (e2.getX() - e1.getX());

                    // don't accept the fling if it's too short
                    // as it may conflict with a button push
                    if (Math.abs(dx) > MAJOR_MOVE && Math.abs(velocityX) > Math.abs(velocityY)) {
                        if (velocityX > 0) {
                            moveRight();
                        } else {
                            moveLeft();
                        }
                        return true;
                    } else {
                        return false;
                    }
                }
            });
    }

    @Override
    public void onSizeChanged(int w, int h, int oldW, int oldH) {
        mWidth = w;
        inLeft   = new TranslateAnimation(mWidth, 0, 0, 0);
        outLeft  = new TranslateAnimation(0, -mWidth, 0, 0);       
        inRight  = new TranslateAnimation(-mWidth, 0, 0, 0);
        outRight = new TranslateAnimation(0, mWidth, 0, 0);

        inLeft.setDuration(ANIM_DURATION);
        outLeft.setDuration(ANIM_DURATION);
        inRight.setDuration(ANIM_DURATION);
        outRight.setDuration(ANIM_DURATION);
    }

    protected void onFinishInflate() {
        int count = getChildCount();
        children = new View[count];
        for (int i = 0; i < count; ++i) {
            children[i] = getChildAt(i);
            if (i != mCurrentView) {
                children[i].setVisibility(View.GONE);
            }
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        mGestureDetector.onTouchEvent(event);
        return true;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        return mGestureDetector.onTouchEvent(event);
    }

    void moveLeft() {
        //  <--
        if (mCurrentView < children.length - 1 && mPreviousMove != LEFT) {
            children[mCurrentView+1].setVisibility(View.VISIBLE);
            children[mCurrentView+1].startAnimation(inLeft);
            children[mCurrentView].startAnimation(outLeft);
            children[mCurrentView].setVisibility(View.GONE);

            mCurrentView++;
            mPreviousMove = LEFT;
        }
    }

    void moveRight() {
        //  -->
        if (mCurrentView > 0 && mPreviousMove != RIGHT) {
            children[mCurrentView-1].setVisibility(View.VISIBLE);
            children[mCurrentView-1].startAnimation(inRight);
            children[mCurrentView].startAnimation(outRight);
            children[mCurrentView].setVisibility(View.GONE);

            mCurrentView--;
            mPreviousMove = RIGHT;
        }
    }

    int getCurrentIndex() {
        return mCurrentView;
    }
}

分享到:
评论

相关推荐

    自制的VIM手册 完全可以打印在一张A4纸上

    - `z+Enter`:光标所在行移到屏幕第一行。 - `z+-`:光标所在行移到屏幕最后一行。 4. **插入文本** - `i`:在光标前插入。 - `I`:在当前行首插入。 - `a`:在光标后插入。 - `A`:在当前行尾插入。 - `o`...

    turn.js实现翻书效果.zip

    7. **响应式设计**:Turn.js支持响应式布局,可以根据屏幕大小自动调整书籍的尺寸。通过设置不同的参数和媒体查询,可以使翻书效果在不同设备上都保持良好体验。 8. **优化性能**:对于大型书籍,需要注意性能问题...

    54张纸牌扑克牌图片

    此外,还有两张特殊的牌——大小王(Joker),这些图片可用于创建或更新游戏中的视觉元素,确保玩家能够清晰地识别每一张牌。 2. **图像格式与分辨率**:通常,用于游戏的图像需要高质量且文件大小适中,以便快速...

    电脑屏幕抖动的解决方法

    我们可以将计算机搬到一张四周都空荡荡的桌子上,然后进行开机测试。如果屏幕抖动的现象消失,那么说明电脑原来的地方有强电场或强磁场干扰。 4. 清洁显示卡:打开机箱,将显示卡从插槽中拔出来,然后用手将显示卡...

    翻扑克游戏_翻扑克牌游戏_

    8. **错误处理**:良好的错误处理机制能提升用户体验,例如限制玩家同时只能翻两张牌,防止非法操作。 9. **响应式设计**:为了适应不同设备(手机、平板、电脑),游戏应具备响应式设计,确保在各种屏幕尺寸上都能...

    turn.js实现翻书效果(自适应单双页)

    在本文中,我们将深入探讨Turn.js如何实现翻书效果,以及如何让它自适应单双页模式。 首先,Turn.js的核心是通过CSS3的3D变换来模拟书页的翻转。这种技术允许开发者创建高度动态且流畅的动画,同时保持良好的性能。...

    flex 虚拟翻书源码 隔空翻书源码

    - **SpriteSheet**:用于合并多个图像到一张大图,减少网络请求,提高性能。 - **BitmapData** 和 **Graphics**:处理位图数据和绘制2D图形,创建书页效果。 - **Timeline Animation**:通过时间轴控制动画,实现...

    12.fireworks8中文版教程之十二制作图片翻转与弹出菜单

    1. **准备素材**:首先,你需要两张图片,一张是默认显示的图片,另一张是鼠标悬停时显示的图片。 2. **创建切片**:在Fireworks中打开图片,使用“切片工具”(Slice Tool)选择需要翻转的部分,可以是整个图片,也...

    jQuery CSS3图片翻转切换代码.zip

    同时,可以添加额外的逻辑来控制图片的切换,比如根据当前显示的图片索引来决定下一张要显示的图片。 4. **动态加载和响应式设计**:对于响应式布局,可能需要使用媒体查询(media queries)来调整图片大小和布局,...

    54张扑克牌(单张)

    8. **性能优化**:在移动设备上,为了减少内存占用和提高加载速度,可能需要对图片进行压缩,或者使用精灵图(Sprite Sheet)技术将多张牌合并到一张大图中。此外,还可以利用缓存策略,减少不必要的网络请求。 9. ...

    从任意一张资源图片中读取触点的色值

    本篇将详细介绍如何从任意一张资源图片中读取触点的色值,并展示一个实现简单取色器的Demo。 首先,我们要了解在iOS中处理图像的基本原理。UIKit框架提供了UIImage类,用于加载、显示和操作图像。在读取图像颜色时...

    3D翻转幻灯片

    在幻灯片中,这种效果通常体现在切换幻灯片时,当前幻灯片会以3D方式翻转到下一张,营造出动态且引人入胜的过渡效果。 3. **HTML结构**:在实现3D翻转幻灯片时,HTML文件需要包含一系列的幻灯片元素,每个元素代表...

    android翻卡片游戏源码

    - 使用`RelativeLayout`或`LinearLayout`来组织卡片,确保它们在屏幕上的正确排列。 2. **图片资源管理** - 游戏中的每张卡片通常有两种状态,正面和反面,这需要两套图片资源。在`res/drawable`目录下,应能找到...

    FastStone Capture屏幕长截图软件包

    对于网页或其他需要滚动截取的长内容,按下F12键,FastStone Capture会自动滚动并拼接截图,形成一张完整的长图片。 该软件还具备编辑功能,允许用户在截图后进行标注和修改。你可以添加文本、箭头、高亮标记,甚至...

    jquery电脑屏幕焦点图.rar

    3. CSS样式:设置图片容器和图片的样式,确保图片大小与屏幕适应,隐藏除第一张外的其他图片。 4. jQuery代码:编写JavaScript代码,主要包括以下部分: - 初始化:获取所有图片元素,设置初始状态。 - 定时器:...

    电脑屏幕抖动的解决办法.docx

    解决方法是将计算机搬到一张四周都空荡荡的桌子上,然后进行开机测试,如果屏幕抖动的现象消失,那么说明用户的电脑原来的地方有强电场或强磁场干扰,请将可疑的东西(如音箱的低音炮、磁化杯子等)从电脑附近拿手。...

    左右翻,中间扩大,以及点击翻页

    在这个案例中,每一页可能是一张图片,用户可以通过左右滑动查看前一张或后一张图片,实现图片序列的连续浏览。 其次,“中间扩大”是指当图片位于屏幕中央时,它的大小会自动放大,以提供更加聚焦的视觉体验。这种...

    横向图片翻页展示模板

    这种设计方式不仅美观,而且提供了良好的用户体验,使得查看多张图片变得轻松而直观。 在网页或应用程序开发中,实现横向图片翻页展示模板的关键技术主要包括HTML、CSS和JavaScript。HTML用于结构化内容,CSS负责...

    opengl读取并在屏幕上显示24位bmp图像.doc

    5. **窗口交换:** 调用`glutSwapBuffers`函数进行前后缓冲区交换,确保图像能够在屏幕上正确显示。 #### 进阶技巧: - **像素缩放与翻转:** OpenGL提供了`glPixelZoom`函数用于调整像素图象的显示大小,可以通过...

    扑克牌图片单张全

    这些图片通常包含了扑克牌的全部54张,包括52张常规牌(每个花色的A到K各一张,再加上J、Q、K)以及两张特殊的 Joker(大王和小王)。 在编程中,每张扑克牌可以被抽象为一个对象,具有花色(红桃、黑桃、梅花、...

Global site tag (gtag.js) - Google Analytics