刚刚看了2D动画方面,想到一个问题
android本身提供的动画是 逐帧 和 补间
逐帧是直接播放开始设定好的内容,补间是根据设定的步骤,利用view上本身的东西(背景啊,控件啊之类)形成动画自定义的补间是用matrix控制变化的
我的问题是:
    我想实现一个这样的动画,一个listView,显示的时候,从梯形还原成矩形
我觉得,
肯定不能用逐帧,因为需要listView上面的字啊什么的。但是用自定义补间的话,又不能通过matrix把矩形变成梯形无奈求解

解决方案 »

  1.   

    参看一下立体翻页的实现方案呢
     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(); 
        } http://www.ibm.com/developerworks/cn/opensource/os-cn-android-anmt2/index.html?ca=drs-
      

  2.   

    先把listview变成Bitmap对象    myListView.setDrawingCacheEnabled(true); 
        myListView.buildDrawingCache();
        Bitmap bitmap = Bitmap.createBitmap(myListView.getDrawingCache());
        myListView.setDrawingCacheEnabled(false);动画的过程是在Bitmap对象上进行的,matrix好像不能矩形变成梯形,动画可以在ondrawn内扫描bitmap重绘时变成梯形,开线程不停postInvalidate()。