刚刚看了2D动画方面,想到一个问题
android本身提供的动画是 逐帧 和 补间
逐帧是直接播放开始设定好的内容,补间是根据设定的步骤,利用view上本身的东西(背景啊,控件啊之类)形成动画
自定义的补间是用matrix控制变化的
我的问题是:
我想实现一个这样的动画,一个listView,显示的时候,从梯形还原成矩形
我觉得,
肯定不能用逐帧,因为需要listView上面的字啊什么的。但是用自定义补间的话,又不能通过matrix把矩形变成梯形
无奈求解
------解决方案--------------------
参看一下立体翻页的实现方案呢
- Java code
protected void drawScreen(Canvas canvas, int screen, long drawingTime) { final int width = getWidth(); final int scrollWidth = screen * width; final int scrollX = this.getScrollX(); if(scrollWidth > scrollX + width || scrollWidth + width < scrollX) { return; } final View child = getChildAt(screen); final int faceIndex = screen; final float faceDegree = currentDegree - faceIndex * preFaceDegree; if(faceDegree > 90 faceDegree < -90) { return; } final float centerX = (scrollWidth < scrollX)?scrollWidth + width:scrollWidth; final float centerY = getHeight()/2; final Camera camera = mCamera; final Matrix matrix = mMatrix; canvas.save(); camera.save(); camera.rotateY(-faceDegree); camera.getMatrix(matrix); camera.restore(); matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); canvas.concat(matrix); drawChild(canvas, child, drawingTime); child.setBackgroundColor(Color.TRANSPARENT); canvas.restore(); }
------解决方案--------------------
先把listview变成Bitmap对象
- Java code
myListView.setDrawingCacheEnabled(true); myListView.buildDrawingCache(); Bitmap bitmap = Bitmap.createBitmap(myListView.getDrawingCache()); myListView.setDrawingCacheEnabled(false);