2013-09-19 3 views
0

Я пытаюсь создать маску трансперенсиантности. Я создал скользящий экран, который расширяет ViewGroup. в конструкторе я добавить:Добавить view to ViewGroup в dispatchDraw

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT); 
    LinearLayout roadMap = new LinearLayout(context); 
    roadMap.setLayoutParams(params); 
    this.addView(roadMap); 

Я тогда переопределить метод onDispatchDraw():

@Override 
protected void dispatchDraw(Canvas canvas) { 
    super.dispatchDraw(canvas); 
    Log.d("touchy touch", "dispatch draw called"); 

    canvas.drawColor(getResources().getColor(R.color.LIGHT_BLUE)); 
    /* recreate the blue rectangle on the canvas */ 
    path = new Path(); 
    path.moveTo(0.0f, 0.0f);  // Top Left 
    path.lineTo(0.0f, 800.0f);  // Bottom Left 
    path.lineTo(0.0f, 800.0f);  // Bottom Right 
    path.lineTo(this.x, 0.0f);  // Top Right 
    path.close(); 
    canvas.drawPath(path,paint);  
} 

В результате у меня прозрачная маска, которая равна путь создания. Это не проблема. Unfortunatley roadMap никогда не отображается. Я попытался переопределить:

@Override 
protected void onLayout(boolean changed, int l, int t, int r, int b) { 
    int count = this.getChildCount(); 
    Log.d("children please", "count: "+count); 
    for (int i = 0; i < count; i++) { 
     View child = this.getChildAt(i); 
     child.layout(0, 0, child.getMeasuredWidth(), child.getMeasuredHeight()); 
     child.invalidate(); 
     child.bringToFront(); 
    } 

} 

Однако до сих пор LinearLayout я пытаюсь прикрепить не появляется.

+0

Почему вы добавляете View в dispatchDraw ??? это худшее место для этого ... – pskink

+0

Где бы вы порекомендовали? Я пытаюсь создать макет, который является частично прозрачным. это должно произойти в ответ на событие касания. – JY2k

+0

1000 вызван тем, что я добавляю представление каждый ondraw. – JY2k

ответ

0

Изменено для расширения FrameLayout. Удалены эта строка:

canvas.drawColor(getResources().getColor(R.color.LIGHT_BLUE)); 

, а затем я видел мнение RoadMap!

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