2015-04-30 2 views
0

Я пытаюсь предотвратить чрезмерное рисование в моем приложении, и в одном из видов корней я хотел бы определить местоположение моих детских просмотров, а затем нарисовать фон, где они нет. По моему мнению, клипирование будет за пределами пути, но то, что я действительно хотел бы сделать, - это не рисовать в определенных местах на экране, где находятся дети. Есть ли хороший способ сделать это?Только рисовать фон, где дети не видны?

EDIT: Так что я не играл с холстом в то время, но я ищу, чтобы сделать что-то вроде этого:

public class ContainerView extends FrameLayout { 

    private final Paint mBackgroundPaint = new Paint(); 
    private final Path mPath = new Path(); 

    public ContainerView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     mBackgroundPaint.setColor(context.getResources().getColor(R.color.default_background)); 
    } 

    @Override protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     canvas.drawPaint(mBackgroundPaint); 

     mPath.reset(); 
     for (int i = 0; i < getChildCount(); i++) { 
      View child = getChildAt(i); 
      mPath.addRect(child.getLeft(), child.getTop(), child.getRight(), child.getBottom(), 
        Path.Direction.CCW); // What direction do I want? 
     } 

     canvas.clipPath(mPath); 
    } 
} 

clipPath просто не будут делать то, что я хочу, хотя, я не Думаю. Я думаю, что это будет зацикливаться вне пути, и мне нужно сделать клип внутри пути.

ответ

0

Вы, вероятно, хотите сделать что-то вроде переопределения onLayout и в конце его:

  • итерация по всему вашему ребенку видит
  • чека, если ребенок виден/непрозрачный
  • наращивания список каждого ребенка положение/размер
  • использую этот список, чтобы сделать свой собственный фон отсечение
+0

Это на самом деле не ответ мой вопрос. Как бы вы кликнули внутри пути? – spierce7

+0

как вы рисуете? – Buddy

Смежные вопросы