2012-01-05 181 views
2

有没有办法在绘制之前在画布上安排可绘制的绘图?我的意思是设置哪个drawable将会绘制在前面,哪个drawable会绘制在后面。安排画布上绘制的绘图

回答

3

它们按您绘制的顺序绘制。试试先画一张,最后一张。

+1

我知道,我需要更好的方法 – Liukas 2012-01-05 11:37:41

+0

那么......然后你正在寻找类似z-index的东西,对吧?至于据我所知没有这样的事情。但是如果你知道你的drawable应该有哪个z-index,只需要命令它们并以这种方式绘制它们即可。它没有什么区别。或者给自己写一个类,让你给所有的drawable和z-index,并按照正确的顺序绘制它们。问题究竟在哪里? – mseo 2012-01-05 22:23:44

+0

嗯,你看,我想要一个drawable在另一个drawable中绘制在for循环中。但我不希望它在循环中绘制的所有drawable的后面,所以把代码放在第一位并不会帮助我:/ – Liukas 2012-01-05 23:24:53

0

稍后您可以绘制到临时画布以绘制到主画布。

Picture iconFrame = new Picture(); 
Canvas tempCanvas = iconFrame.beginRecording(width, height); 
// width and height refer to the intended destination canvas size 

... 
// Any configuration before performing the draw should be done here 

tempCanvas.drawPath(...); 
tempCanvas.drawBitmap(...); 
// Any required draw commands for this image should be done to tempCanvas 

iconFrame.endRecording(); 

... 
// Any other configuration or draw commands can be done here 

iconFrame.draw(canvas); 
// Assigns the content of tempCanvas to the top of the main Canvas 

在我的情况下,自定义路径中我的形象的PorterDuff操作如果因为后来抽奖损坏它,它是第一只进行工作。

0

一个办法做到这一点是有你画定义的z-index变量的一切,并收集你在一个点绘制的一切,并把它们在列表中,你再画它为了用的z-index之前。

例如:

Interface IDrawable{ 
    int getZ(); 
    void draw(); 
} 

class drawMe implements IDrawable{ 
    @overrider 
    draw(){ 
    /// do my drawing 
    } 

    @override 
    int getZ() {return z; } 
} 

绘图或主类

List<IDrawable> myList= new ArrayList(); 
myList.Add(new DrawMe()); 

,并在您的抽奖方法

for(IDrawable draw : myList.OrderBy(z){ 
    draw.draw(); 
} 

这就是概念反正