首页 > 编程知识 正文

android滚动布局(安卓侧滑返回透明设置)

时间:2023-05-04 17:14:06 阅读:69600 作者:1414

活动布局:

Aty代码:

Java

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

//*

*布局属性的动画测试

*本aty的布局最外层时为RelativeLayout

* bottom是线性布局,与动画的实现关系不大

*顶层是自定义的线性布局,它为动画复盖onTouchEvent事件

*顶层默认遮挡bottom

*

* @author vigiles

*/

publicclasshomeactivityextendsactivity {

@Override

protectedvoidoncreate (边界维护实例state )。

super.oncreate (savedinstancestate;

setcontentview (r.layout.activity _ main;

//bottom层按钮

findviewbyid(r.id.BTN ).setonclicklistener ) (newonclicklistener ) )。

@Override

公共语音在线(查看) {

toast.maketext (home activity.this,'基础控件响应:维吾尔博客',0 ).show );

}

);

//顶层按钮

findviewbyid(r.id.BTN2 ).setonclicklistener ) (newonclicklistener ) ) )。

@Override

公共语音在线(查看) {

toast.maketext (home activity.this,' top布局控件响应: cuiweiyou.com ',0 ).show );

}

);

}

}

侧滑班定制

根据速度判断,手指的滑动速度足够快,侧滑会立即执行。 使用velocity跟踪器速度跟踪器。 可以删除此功能。

onLayout () )

首先重写这个方法,主要目的是得到本布局的属性对象。

//**

*手指滑动时,系统将继续调用此方法并重新绘制此视图/界面/布局

*首次加载此布局时,将调用一次APP应用程序。 初始化属性实例非常重要。

* @param changed此布局的幻灯片/移动为true

* @param l相对于此布局左侧父容器左侧的位置,父容器左侧的左侧为负数

* @param r此布局相对于右侧父容器左端的位置

* @param t此布局上端相对于父容器上端的位置

* @param b此布局底边相对于父容器上边的位置

(//

Java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

@Override

protectedvoidonlayout (布尔更改,intl,intt,intr,intb ) {

super.onlayout (变更,l,t,r,b );

//位置移动后

if (已更改) {

//获取布局对象

内容参数=(relative layout.layout params ) this.getLayoutParams );

内容参数. width=content width;

setlayoutparams (内容参数;

}

}

onTouchEvent

然后是必须的重写touch事件。在其中根据手指的按下位置、滑动过程、拿起位置、滑动速度进行判断分析处理。

保存手指按下时marginLeft的值和手指的距离“dis”

保持手指滑动时和marginLeft的距离一直是“dis”

说起来比较绕,具体还是代码:

手指按下

Java

1

2

3

4

5

6

7

8

9

switch(event.getAction()){

caseMotionEvent.ACTION_DOWN:

xDown=event.getRawX();

// 无论是否已经侧滑,这个得到的都是手指和本布局左边线的距离

paramsLeftMargin=(int)(xDown-contentParams.leftMargin);

paramsRightMargin=(int)(contentParams.leftMargin+xDown);

break;

手指滑动

Java

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

caseMotionEvent.ACTION_MOVE:

xMove=event.getRawX();

intdistanceX=(int)(xMove-xDown);// 负数:向左滑,正数:向右滑

// 如果向左滑的

if(distanceX<=0){

// 如果已经滑开

if(isOpen){

// 手指滑动过程中的位置减去和边线的距离就是边线的目标位置。滑动中保持手指和边线距离不变

contentParams.leftMargin=(int)(xMove-paramsLeftMargin);

contentParams.rightMargin=(int)(xMove-paramsRightMargin);

// 如果向左滑的太多

if(contentParams.leftMargin<0){

contentParams.leftMargin=0;

contentParams.rightMargin=0;

}

}else{

contentParams.leftMargin=0;

contentParams.rightMargin=0;

}

setLayoutParams(contentParams);

}

// 如果向右滑动

elseif(distanceX>0){

// 如果尚未滑开

if(!isOpen){

contentParams.leftMargin=distanceX;// 负数,绝对值即向右移动的距离

contentParams.rightMargin=-distanceX;

// 如果移动太多

if(contentParams.leftMargin>contentWidth-300){

contentParams.leftMargin=contentWidth-300;

contentParams.rightMargin=2*contentWidth-300;

}

}else{

contentParams.leftMargin=contentWidth-300;

contentParams.rightMargin=2*contentWidth-300;

}

setLayoutParams(contentParams);

}

break;

手指拿起

Java

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

caseMotionEvent.ACTION_UP:

xUp=event.getRawX();

intupDistanceX=(int)(xUp-xDown);// 手指拿起后相对于按下时的距离。正数:向右,负数:向左

if(Math.abs(upDistanceX)>=touchSlop){

// 如果手指是向右滑动的,布局还没滑开

if(upDistanceX>0&&!isOpen){

mVelocityTracker.computeCurrentVelocity(1000);// 计算1秒内速率

intvelocity=Math.abs((int)mVelocityTracker.getXVelocity());// x轴速度

// 如果滑动距离有效,或速度够快

if(upDistanceX>500||velocity>SNAP_VELOCITY){

// 向右移动,速度30像素

//new ScrollTask().execute(30); // TODO scrollTo

// 向右移动

contentParams.leftMargin=contentWidth-300;

contentParams.rightMargin=2*contentWidth-300;

setLayoutParams(contentParams);

isOpen=true;

}

// 如果

else{

//                // 向左移动,速度30像素

//                new ScrollTask().execute(-30);

contentParams.leftMargin=0;

contentParams.rightMargin=0;

setLayoutParams(contentParams);

}

}

elseif(upDistanceX<0&&isOpen){

mVelocityTracker.computeCurrentVelocity(1000);

intvelocity=Math.abs((int)mVelocityTracker.getXVelocity());

if(Math.abs(upDistanceX)>500||velocity>SNAP_VELOCITY){

// 向左移动,速度30像素

//new ScrollTask().execute(-30);

contentParams.leftMargin=0;

contentParams.rightMargin=0;

setLayoutParams(contentParams);

isOpen=false;

}

else{

//                // 向右移动,速度30像素

//                new ScrollTask().execute(30);

contentParams.leftMargin=contentWidth-300;

contentParams.rightMargin=2*contentWidth-300;

setLayoutParams(contentParams);

}

}

}

elseif(Math.abs(upDistanceX)

// 当手指按下向左滑又向右滑回来,不足以触发事件时

if(isOpen){

contentParams.leftMargin=contentWidth-300;

contentParams.rightMargin=2*contentWidth-300;

setLayoutParams(contentParams);

}else{

contentParams.leftMargin=0;

contentParams.rightMargin=0;

setLayoutParams(contentParams);

}

}

// 重置速度追踪器

mVelocityTracker.recycle();

mVelocityTracker=null;

break;

提供项目包:注意为了上传方便android-support-v4.jar删除了,导入后记得替换。同时重写build project。

[download id=”1672″]

承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。