GridDrawManager::drawDisplayItem(RenderView view, GL11 gl, DisplayItem displayItem, Texture texture, int pass,Texture previousTexture, float mixRatio) 函数有下面几句:
- Vector3f animatedPosition = displayItem.mAnimatedPosition;
-
float translateXf = animatedPosition.x * camera.mOneByScale;
-
float translateYf = animatedPosition.y * camera.mOneByScale;
-
float translateZf = -animatedPosition.z;
Vector3f animatedPosition = displayItem.mAnimatedPosition;
float translateXf = animatedPosition.x * camera.mOneByScale;
float translateYf = animatedPosition.y * camera.mOneByScale;
float translateZf = -animatedPosition.z;
调用过程:
->computeVisibleItems(),displayItems[baseIndex + j] = displayItem;Vector3f position = pool.create(); GridCameraManager.getSlotPositionForSlotIndex(i, camera, layout, deltaAnchorPosition, position);//give position value displayList.setPositionAndStackIndex(displayItem, position, j, true);//raletive position to item
->GridLayer, mDrawManager = new GridDrawManager(context, mCamera, mDrawables, sDisplayList, sDisplayItems, sDisplaySlots);
->GridDrawManager(), mDisplayItems = displayItems;
->drawFocusItems ,DisplayItem[] displayItems = mDisplayItems;
->animatedPosition = displayItem.mAnimatedPosition;
->drawDisplayItem, amAnimatedPosition
->DisplayItem::commit() amAnimatedPosition.set(mTargetPosition);
-> DisplayItem::set(Vector3f position, int stackIndex, boolean performTransition) mTargetPosition.z =
- public void getPositionForSlotIndex(int slotIndex, int itemWidth, int itemHeight, Vector3f outPosition) {
- outPosition.x = (slotIndex / mNumRows) * (itemWidth + mSpacingX);
- outPosition.y = (slotIndex % mNumRows) * (itemHeight + mSpacingY);
-
int maxY = (mNumRows - 1) * (itemHeight + mSpacingY);
-
outPosition.y -= (maxY >> 1);
-
outPosition.z = 0;
-
Log.d("outPosition","slotIndex="+slotIndex+",mNumRows="+mNumRows+",outPosition=("+outPosition.x+","+outPosition.y+","+outPosition.z+")");
- }
public void getPositionForSlotIndex(int slotIndex, int itemWidth, int itemHeight, Vector3f outPosition) {
outPosition.x = (slotIndex / mNumRows) * (itemWidth + mSpacingX);
outPosition.y = (slotIndex % mNumRows) * (itemHeight + mSpacingY);
int maxY = (mNumRows - 1) * (itemHeight + mSpacingY);
outPosition.y -= (maxY >> 1);
outPosition.z = 0;
Log.d("outPosition","slotIndex="+slotIndex+",mNumRows="+mNumRows+",outPosition=("+outPosition.x+","+outPosition.y+","+outPosition.z+")");
}
在gallery3d中矩阵是从上到下、从左到右排列的,在主界面时最多有3行,mNumRows=3,在缩略图界面最多4行mNumRows=4,在查看界面只有一行mNumRows=1
上面函数是计算所绘制项位置的,slotIndex / mNumRows得到的是当前处于多少列,slotIndex % mNumRows得到的是处于多少行。 int maxY = (mNumRows - 1) * (itemHeight + mSpacingY);
outPosition.y -= (maxY >> 1);是为了在y方向对称,想成屏幕中间是分界线,以上的项y为负,线以下的y为正。
deltaAnchorPosition的赋值过程:
- int currentlyVisibleSlotIndex = getAnchorSlotIndex(ANCHOR_CENTER);->anchorItem = displayItem.mItemRef;-> newSlotIndex = i;->if (currentAnchorSlotIndex != Shared.INVALID && newAnchorSlotIndex != Shared.INVALID) {
- layout.getPositionForSlotIndex(newAnchorSlotIndex, itemWidth, itemHeight, deltaAnchorPosition);
- oldLayout.getPositionForSlotIndex(currentAnchorSlotIndex, itemWidth, itemHeight, currentSlotPosition);
- currentSlotPosition.subtract(sDeltaAnchorPosition);
- deltaAnchorPosition.subtract(currentSlotPosition);
-
deltaAnchorPosition.y = 0;
-
deltaAnchorPosition.z = 0;
- }
int currentlyVisibleSlotIndex = getAnchorSlotIndex(ANCHOR_CENTER);->anchorItem = displayItem.mItemRef;-> newSlotIndex = i;->if (currentAnchorSlotIndex != Shared.INVALID && newAnchorSlotIndex != Shared.INVALID) {
layout.getPositionForSlotIndex(newAnchorSlotIndex, itemWidth, itemHeight, deltaAnchorPosition);
oldLayout.getPositionForSlotIndex(currentAnchorSlotIndex, itemWidth, itemHeight, currentSlotPosition);
currentSlotPosition.subtract(sDeltaAnchorPosition);
deltaAnchorPosition.subtract(currentSlotPosition);
deltaAnchorPosition.y = 0;
deltaAnchorPosition.z = 0;
}
MediaFeed::run()
onFeedChanged(, onLayout(newSlotIndex, currentlyVisibleSlotIndex, null);
onLayout, sDeltaAnchorPositionUncommited.set(deltaAnchorPosition);
computeVisibleRange(),sDeltaAnchorPosition.set(sDeltaAnchorPositionUncommited);
deltaAnchorPosition.set(sDeltaAnchorPosition);
deltaAnchorPosition
相关推荐
alpha 透明度,指明当前新的 alpha 颜色值 ,只有在 glColor4 函数中带4个变量时才会指定此参数。 此外还包括: void glColor3bv(const GLbyte * v) void glColor3dv(const GLdoble * v) void glColor3fv(const ...
您还必须至少使用glTranslate(),glRotate()和glScale()调用中的一个来将这些原语放置在空间中(您可能会使用它们中的许多!)您还必须使用glPushMatrix()和glPopMatrix ()来嵌套矩阵转换。 建模器框架...
OpenGL Mathematics (GLM...旧版本OpenGL提供了类似glRotate, glTranslate和glScale等函数,在现代OpenGL中,这些函数已经不存在了,我们需要自己处理所有的数学运算。GLM能在后续教程里提供很多矢量和矩阵运算上帮助。
1. 对标架进行变换,使用glTranslate, glRotate等变换其实是对当前坐标架进行变换,然后把顶点坐标放置在当前的新坐标系中 2. 对坐标进行变换
Name glScalef , glScalex - multiply the current matrix by a general scaling matrix C Specification void glScalef(GLfloat x, ...glEnable, glMatrixMode, glMultMatrix, glPushMatrix, glRotate, glTranslate
Void glTranslate(TYPE x,TYPE y,TYPE z); Void glRotate{fd}(TYPE angle,TYPE x,TYPE y,TYPE z); 把当前矩阵与一个表示移动物体的矩阵相乘,以逆时针方向绕着原点到(x,y,z)的直线旋转。Angle是旋转的角度。 Void...