Android 3D滑动菜单实现及源代码Word文件下载.docx
- 文档编号:19631973
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:27
- 大小:482.70KB
Android 3D滑动菜单实现及源代码Word文件下载.docx
《Android 3D滑动菜单实现及源代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《Android 3D滑动菜单实现及源代码Word文件下载.docx(27页珍藏版)》请在冰豆网上搜索。
11.
Bitmap
sourceBitmap;
12.
13.
14.
源视图的宽度。
15.
16.
float
sourceWidth;
17.
18.
19.
Matrix对象,用于对图片进行矩阵操作。
20.
21.
Matrix
matrix
=
new
Matrix();
22.
23.
24.
Camera对象,用于对图片进行三维操作。
25.
26.
Camera
camera
Camera();
27.
28.
29.
Image3dView的构造函数
30.
31.
@param
context
32.
attrs
33.
34.
public
Image3dView(Context
context,
AttributeSet
attrs)
35.
super(context,
attrs);
36.
}
37.
38.
39.
提供外部接口,允许向Image3dView传入源视图。
40.
41.
view
42.
传入的源视图
43.
44.
void
setSourceView(View
view)
45.
sourceView
view;
46.
sourceWidth
sourceView.getWidth();
47.
48.
49.
50.
清除掉缓存的图片对象。
51.
52.
clearSourceBitmap()
53.
if
(sourceBitmap
!
null)
54.
sourceBitmap
null;
55.
56.
57.
58.
@Override
59.
protected
onDraw(Canvas
canvas)
60.
super.onDraw(canvas);
61.
==
62.
getSourceBitmap();
63.
64.
//
计算图片需要旋转的角度
65.
degree
90
-
(90
/
sourceWidth)
getWidth();
66.
camera.save();
67.
camera.rotateY(degree);
68.
camera.getMatrix(matrix);
69.
camera.restore();
70.
将旋转的中心点移动到屏幕左边缘的中间位置
71.
matrix.preTranslate(0,
-getHeight()
2);
72.
matrix.postTranslate(0,
getHeight()
73.
canvas.drawBitmap(sourceBitmap,
matrix,
null);
74.
75.
76.
77.
获取源视图对应的图片对象。
78.
79.
getSourceBitmap()
80.
(sourceView
81.
sourceView.setDrawingCacheEnabled(true);
82.
sourceView.layout(0,
0,
sourceView.getWidth(),
sourceView.getHeight());
83.
sourceView.buildDrawingCache();
84.
sourceView.getDrawingCache();
85.
86.
87.
88.}
可以看到,Image3dView中提供了一个setSourceView()方法,用于传递源视图进来,我们稍后复制镜像就是对它进行复制。
然后在onDraw()方法里对sourceBitmap进行判断,如果为空,则去调用getSourceBitmap()方法来生成一张镜像图片,getSourceBitmap()方法的细节大家自己去看。
在获得了镜像图片之后,接下来就是要计算图片的旋转角度了,这里根据Image3dView当前的宽度和源视图的总宽度进行对比,按比例算出旋转的角度。
然后调用Camera的rotateY()方法,让图片团练Y轴进行旋转,并将旋转的中心点移动到屏幕左边缘的中间位置,这几行代码我们在上篇文章中已经见过了,算是挺熟悉了吧!
最后调用Canvas的drawBitmap()方法把图片绘制出来。
完成了Image3dView之后,接着我们要开始编写滑动菜单部分的代码,其实这次的代码和之前的滑动菜单代码大同小异,看过我前面文章的朋友,这次理解起来一定会轻而易举。
新建ThreeDSlidingLayout类,代码如下所示:
ThreeDSlidingLayout
RelativeLayout
implements
OnTouchListener
滚动显示和隐藏左侧布局时,手指滑动需要达到的速度。
static
final
int
SNAP_VELOCITY
200;
滑动状态的一种,表示未进行任何滑动。
DO_NOTHING
0;
滑动状态的一种,表示正在滑出左侧菜单。
SHOW_MENU
1;
滑动状态的一种,表示正在隐藏左侧菜单。
HIDE_MENU
2;
记录当前的滑动状态
slideState;
屏幕宽度值。
screenWidth;
右侧布局最多可以滑动到的左边缘。
leftEdge
右侧布局最多可以滑动到的右边缘。
rightEdge
在被判定为滚动之前用户手指可以移动的最大值。
touchSlop;
记录手指按下时的横坐标。
xDown;
记录手指按下时的纵坐标。
yDown;
记录手指移动时的横坐标。
xMove;
记录手指移动时的纵坐标。
yMove;
记录手机抬起时的横坐标。
xUp;
左侧布局当前是显示还是隐藏。
只有完全显示或隐藏时才会更改此值,滑动过程中此值无效。
boolean
isLeftLayoutVisible;
是否正在滑动。
isSliding;
是否已加载过一次layout,这里onLayout中的初始化只需加载一次
loadOnce;
88.
89.
左侧布局对象。
90.
91.
leftLayout;
92.
93.
94.
右侧布局对象。
95.
96.
rightLayout;
97.
98.
99.
在滑动过程中展示的3D视图
100.
101.
image3dView;
102.
103.
104.
用于监听侧滑事件的View。
105.
106.
mBindView;
107.
108.
109.
左侧布局的参数,通过此参数来重新确定左侧布局的宽度,以及更改leftMargin的值。
110.
111.
MarginLayoutParams
leftLayoutParams;
112.
113.
114.
右侧布局的参数,通过此参数来重新确定右侧布局的宽度。
115.
116.
rightLayoutParams;
117.
118.
119.
3D视图的参数,通过此参数来重新确定3D视图的宽度。
120.
121.
ViewGroup.LayoutParams
image3dViewParams;
122.
123.
124.
用于计算手指滑动的速度。
125.
126.
VelocityTracker
mVelocityTracker;
127.
128.
129.
重写SlidingLayout的构造函数,其中获取了屏幕的宽度。
130.
131.
132.
133.
134.
ThreeDSlidingLayout(Context
135.
136.
WindowManager
wm
(WindowManager)
context.getSystemService(Context.WINDOW_SERVICE);
137.
screenWidth
wm.getDefaultDisplay().getWidth();
138.
touchSlop
ViewConfiguration.get(context).getScaledTouchSlop();
139.
140.
141.
142.
绑定监听侧滑事件的View,即在绑定的View进行滑动才可以显示和隐藏左侧布局。
143.
144.
bindView
145.
需要绑定的View对象。
146.
147.
setScrollEvent(View
bindView)
148.
mBindView
bindView;
149.
mBindView.setOnTouchListener(this);
150.
151.
152.
153.
将屏幕滚动到左侧布局界面,滚动速度设定为10.
154.
155.
scrollToLeftLayout()
156.
image3dView.clearSourceBitmap();
157.
ScrollTask().execute(-10);
158.
159.
160.
161.
将屏幕滚动到右侧布局界面,滚动速度设定为-10.
162.
163.
scrollToRightLayout()
164.
165.
ScrollTask().execute(10);
166.
167.
168.
169.
左侧布局是否完全显示出来,或完全隐藏,滑动过程中此值无效。
170.
171.
@return
左侧布局完全显示返回true,完全隐藏返回false。
172.
173.
isLeftLayoutVisible()
174.
return
175.
176.
177.
178.
在onLayout中重新设定左侧布局和右侧布局的参数。
179.
180.
181.
onLayout(boolean
changed,
l,
t,
r,
b)
182.
super.onLayout(changed,
b);
183.
(changed
&
loadOnce)
184.
获取左侧布局对象
185.
leftLayout
findViewById(R.id.menu);
186.
leftLayoutParams
(MarginLayoutParams)
leftLayout.getLayoutParams();
187.
-leftLayoutParams.width;
188.
获取右侧布局对象
189.
rightLayout
findViewById(R.id.content);
190.
rightLayoutParams
rightLayout.getLayoutParams();
191.
rightLayoutParams.width
192.
rightLayout.setLayoutParams(rightLayoutParams);
193.
获取3D视图对象
194.
image3dView
(Image3dView)
findViewById(R.id.image_3d_view);
195.
将左侧布局传入3D视图中作为生成源
196.
image3dView.setSourceView(leftLayout);
197.
loadOnce
true;
198.
199.
200.
201.
202.
onTouch(View
v,
MotionEvent
event)
203.
createVelocityTracker(event);
204.
switch
(event.getAction())
205.
case
MotionEvent.ACTION_DOWN:
206.
手指按下时,记录按下时的横坐标
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 3D滑动菜单实现及源代码 滑动 菜单 实现 源代码