Android特效开发(仿zaker用手向上推动的效果(推动门效果))

[1].[代码] [Java]代码 跳至 [1]

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

public

class

PullDoorView
extends

RelativeLayout { 

  

    private

Context mContext; 

  

    private

Scroller mScroller; 

  

    private

int

mScreenWidth =
0

  

    private

int

mScreenHeigh =
0

  

    private

int

mLastDownY =
0

  

    private

int

mCurryY; 

  

    private

int

mDelY; 

  

    private

boolean

mCloseFlag =
false

  

    private

ImageView mImgView; 

  

    public

PullDoorView(Context context) { 

        super(context); 

        mContext
= context; 

        setupView(); 

    

  

    public

PullDoorView(Context context, AttributeSet attrs) { 

        super(context,
attrs); 

        mContext
= context; 

        setupView(); 

    

  

    @SuppressLint("NewApi"

    private

void

setupView() { 

  

        //
这个Interpolator你可以设置别的 我这里选择的是有弹跳效果的Interpolator 

        Interpolator
polator =
new

BounceInterpolator(); 

        mScroller
=
new

Scroller(mContext, polator); 

  

        //
获取屏幕分辨率 

        WindowManager
wm = (WindowManager) (mContext 

                .getSystemService(Context.WINDOW_SERVICE)); 

        DisplayMetrics
dm =
new

DisplayMetrics(); 

        wm.getDefaultDisplay().getMetrics(dm); 

        mScreenHeigh
= dm.heightPixels; 

        mScreenWidth
= dm.widthPixels; 

  

        //
这里你一定要设置成透明背景,不然会影响你看到底层布局 

        this.setBackgroundColor(Color.argb(0,
0,
0,
0)); 

        mImgView
=
new

ImageView(mContext); 

        mImgView.setLayoutParams(new

LayoutParams(LayoutParams.MATCH_PARENT, 

                LayoutParams.MATCH_PARENT)); 

        mImgView.setScaleType(ImageView.ScaleType.FIT_XY);//
填充整个屏幕 

        mImgView.setImageResource(R.drawable.bg1);
//
默认背景 

        addView(mImgView); 

    

  

    //
设置推动门背景 

    public

void

setBgImage(
int

id) { 

        mImgView.setImageResource(id); 

    

  

    //
设置推动门背景 

    public

void

setBgImage(Drawable drawable) { 

        mImgView.setImageDrawable(drawable); 

    

  

    //
推动门的动画 

    public

void

startBounceAnim(
int

startY,
int

dy,
int

duration) { 

        mScroller.startScroll(0,
startY,
0,
dy, duration); 

        invalidate(); 

    

  

    @Override

    public

boolean

onTouchEvent(MotionEvent event) { 

        int

action = event.getAction(); 

        switch

(action) { 

        case

MotionEvent.ACTION_DOWN: 

            mLastDownY
= (
int)
event.getY(); 

            System.err.println("ACTION_DOWN="

+ mLastDownY); 

            return

true

        case

MotionEvent.ACTION_MOVE: 

            mCurryY
= (
int)
event.getY(); 

            System.err.println("ACTION_MOVE="

+ mCurryY); 

            mDelY
= mCurryY - mLastDownY; 

            //
只准上滑有效 

            if

(mDelY <
0)

                scrollTo(0,
-mDelY); 

            

            System.err.println("------------- 
"

+ mDelY); 

  

            break

        case

MotionEvent.ACTION_UP: 

            mCurryY
= (
int)
event.getY(); 

            mDelY
= mCurryY - mLastDownY; 

            if

(mDelY <
0)

  

                if

(Math.abs(mDelY) > mScreenHeigh /
2)

  

                    //
向上滑动超过半个屏幕高的时候 开启向上消失动画 

                    startBounceAnim(this.getScrollY(),
mScreenHeigh,
450); 

                    mCloseFlag
=
true

  

                }
else

                    //
向上滑动未超过半个屏幕高的时候 开启向下弹动动画 

                    startBounceAnim(this.getScrollY(),
-
this.getScrollY(),
1000); 

  

                

            

  

            break

        

        return

super
.onTouchEvent(event); 

    

  

    @Override

    public

void

computeScroll() { 

  

        if

(mScroller.computeScrollOffset()) { 

            scrollTo(mScroller.getCurrX(),
mScroller.getCurrY()); 

            Log.i("scroller",
"getCurrX()=
"

+ mScroller.getCurrX() 

                    +
"    
getCurrY()="

+ mScroller.getCurrY() 

                    +

getFinalY() =  "

+ mScroller.getFinalY()); 

            //
不要忘记更新界面 

            postInvalidate(); 

        }
else

            if

(mCloseFlag) { 

                this.setVisibility(View.GONE); 

            

        

    

  

}

时间: 2024-08-07 08:36:26

Android特效开发(仿zaker用手向上推动的效果(推动门效果))的相关文章

Android特效专辑(六)——仿QQ聊天撒花特效,无形装逼,最为致命

Android特效专辑(六)--仿QQ聊天撒花特效,无形装逼,最为致命 我的关于特效的专辑已经在CSDN上申请了一个专栏--http://blog.csdn.net/column/details/liuguilin.html 日后我所写的特效专辑也会以一添加在这个专栏上,今天写的这个特效,是关于聊天的,你肯定遇到过,就是你跟人家聊天的时候,比如发送应(么么哒),然后屏幕上全部就是表情了,今天我们就是做这个,撒花的特效,国际惯例,上图 截图 实现这样的效果,你要知道贝塞尔曲线,何谓贝塞尔曲线?其实

CSS3实战开发:仿天猫首页图片展示动画特效实战开发

各位网友大家好,我是陌上花会开,人称陌陌.今天我带领大家开发一个仿天猫首页图片展示动画特效的案例.一如往常,我既不提供源码给大家,也不提供Demo给大家,只是希望大家能跟着我的讲解,然后将代码一步步复制到本地,本人可以保证,页面上的代码复制到本地,绝对百分百运行,且得到与陌陌一样的运行效果.我这么做只为激起大伙的动手能力,望大家能明白我的用心. 好了,不废话了,直接本篇的实战开发吧. 我们看一下我们今天要做的实战案例效果图: 1. 鼠标划过前: 2. 鼠标划过右侧的图片时: 可能大伙看这个静态截

【iOS开发每日小笔记(三)】利用iOS7 UIKit Dynamics 仿Zaker客户端首页动态效果

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.该分类的文章,内容涉及的知识点可能是很简单的.或是用很短代码片段就能实现的,但在我看来它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下(^_^).其实,90%的作用是帮助自己回顾.记忆.复习.如果看官觉得太easy,太碎片,则可以有两个选择:1,移步[iOS探究]分类,对那里的文章进行斧正:2,在

【Android分享】仿WIN8系统磁贴点击效果

[Android分享]仿WIN8系统磁贴点击效果 功能分类:特效 支持平台:Android 运行环境:Eclipse 开发语言:Java 开发工具:Eclipse 源码大小:188.47KB 下载地址:http://www.dwz.cn/xslIw 源码简介 Demo源自http://www.apkbus.com/forum.php?mod=viewthread&tid=84631,利用自定义ImageView+View点击事件+动画实现的效果,因为原Demo无注释,所以本人在主要部分加入了代码

Android安卓开发知识库汇总

初级 Android 面试知识库 Android 面试题总结之Android 进阶(二) - fuchenxuan blog - 博客频道 - CSDN.NET 如何成为一名优秀的程序员 | Mystra 2016Android某公司面试题 | yuweiguo's blog 我面试到底问什么? - AndroidDeveloper - 知乎专栏 扫清Android面试障碍 [Android基础]Android总结篇 - 陶程的博客 - 博客频道 - CSDN.NET AndroidStudyD

Android艺术开发探索第三章——View的事件体系(上)

Android艺术开发探索第三章----View的事件体系(上) 我们继续来看这本书,因为有点长,所以又分了上下,你在本片中将学习到 View基础知识 什么是View View的位置参数 MotionEvent和TouchSlop VelocityTracker,GestureDetector和Scroller View的滑动 使用scrollTo/scrollBy 使用动画 改变布局参数 各种滑动方式的对比 弹性滑动 使用Scroller 通过动画' 使用延时策略 这章的概念偏自定义View方

开源分享二(Android相机开发实战)

开源分享二(Android相机开发实战) 开源分享 一(StickerCamera + 仿微信多图选择) 前言 上篇博文给大家分享了两个非常实用的项目功能模块,不知道大伙感觉如何?有木有一种臭袜子味扑鼻,酸爽的赶脚!!!贱笑贱笑了~ ~ OK!不扯淡了,言归正传.本文将主要为大家介绍Android中自定义相机的开发,做Android应用的童鞋应该都知道,在应用中使用相机功能有两种方式: 调用Camera API 自定义相机 调用系统相机 由于需求不同,所以选择的方案固然也不同,至于第二种调用系统

Android 轻松实现仿淘宝地区选择

代码地址如下:<br>http://www.demodashi.com/demo/11122.html 一.准备工作 Android开发环境,学习Android的童鞋肯定都知道了,这里我就不累述了. 二.运行效果 说了效果可能不太直观,下面上两张图看看效果淘宝地区选择效果 再来一张自己的效果 gif的效果可能不太好,大家自己用Android手机打开淘宝看看 三.项目结构 四.程序实现 展示很简单,ListView就可以了.对于动画效果,只需要在getView的时候获取到要展示的View,通过属

Android艺术开发探索第三章————View的事件体系(下)

Android艺术开发探索第三章----View的事件体系(下) 在这里就能学习到很多,主要还是对View的事件分发做一个体系的了解 一.View的事件分发 上篇大致的说了一下View的基础知识和滑动,现在我们再来聊聊一个比较核心的知识点,那就是事件分发了,而且他还是一个难点,我们更加应该掌握,View的滑动冲突一直都是很苦恼的,这里,我们就来一起探索一下 1.点击事件的传递规则 我们分析的点击事件可不是View.OnClickListener,而是我们MotionEvent,即点击事件,关于M