自定义FrameLayout 实现屏幕一张张翻
来源:互联网 发布:校园网络投标书 编辑:程序博客网 时间:2024/06/06 23:16
http://wang-peng1.iteye.com/blog/995814
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; }}
0 0
- 自定义FrameLayout 实现屏幕一张张翻
- 自定义ViewGroup继承FrameLayout 实现下拉刷新功能
- 自定义圆形FrameLayout布局
- 应用FrameLayout实现遮罩层
- 使用FrameLayout实现遮罩层
- 用代码实现FrameLayout
- 使用FrameLayout实现遮罩层
- 自定义圆角的FrameLayout
- Android开发中自定义View设定到FrameLayout布局中实现多组件显示
- Android开发中自定义View设定到FrameLayout布局中实现多组件显示
- Android自定义View设定到FrameLayout布局中实现多组件显示
- 自定义ViewGroup和FrameLayout实现轮播图(包括底部小圆点)
- 翻书动画实现
- 手机实现翻屏
- 翻书动画实现
- FrameLayout布局实现简单tab
- 使用FrameLayout实现霓虹灯效果
- FrameLayout
- MQ技术文档
- Android开发之Java集合类性能分析
- Android下获取开机时间
- java基础18:java动态代理
- View类的onMeasure方法介绍
- 自定义FrameLayout 实现屏幕一张张翻
- Android动态加载技术三个关键问题详解
- Eclipse中LogCat突然停止工作的解决
- Task和Activity相关的一些属性
- 计算语言学之语料库
- 读《程序员向架构师转型必备》
- Java并发编程实践(十)
- 网络编程_UDP协议接收数据
- Android入门第十五篇之ActivityGroup + GridView 实现Tab分页标签