2013-04-10 2 views
0

다른 View Canvas에 TextView의 DrawingCache를 그릴 때 TextView의 중력은 수직 방향으로 영향을 미치지 않습니다. 여기TextViews 중력이 수직으로 작동하지 않습니다.

캔버스 소유 할 TextViews 캔버스 그리기 클래스 : 보시다시피

ViewGroup root = (ViewGroup) findViewById(R.id.root); // is a linear_layout - width and height is match_parent 
    TextView tv = new TextView(getApplicationContext()); 
    tv.setText("Hello World!"); 
    tv.setTextSize(40.0f);  
    tv.setLayoutParams(new LinearLayout.LayoutParams(300,200));  
    tv.setTextColor(Color.WHITE); 
    tv.setBackgroundColor(Color.parseColor("#3131c5")); 
    tv.setGravity(Gravity.CENTER); 

    GravityDecorator gd = new GravityDecorator(tv, getApplicationContext()); 
    root.addView(gd); 

의 TextViews 콘텐츠의 중력 : 여기

public class GravityDecorator extends View{ 
    private View view; 
    private Paint paint= new Paint(); 

    public GravityDecorator(View view,Context context) { 
     super(context); 
     this.view = view; 
     view.setDrawingCacheEnabled(true); 
     view.layout(0, 0,600,500); 
     this.layout(0, 0,600,500); 
     invalidate(); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     view.buildDrawingCache();  
     canvas.drawBitmap(view.getDrawingCache(), 0, 0, paint);  
     view.destroyDrawingCache(); 
    } 

} 

그것을 테스트하는 코드 (에서 onCreate가)입니다 수평 방향으로 만 적용됩니다.

버그가있는 경우 그 이유와 해결 방법은 무엇입니까?

는 레이아웃 PARAM은 처음에는 TextView 설정지고 있지 않기 때문에 당신이

답변

1
root = (ViewGroup) findViewById(R.id.root); // is a linear_layout - width and height is match_parent 
tv = new TextView(getApplicationContext()); 
tv.setText("Hello World!"); 
tv.setTextSize(40.0f);  
tv.setLayoutParams(new LinearLayout.LayoutParams(300,200));  
tv.setTextColor(Color.WHITE); 
tv.setBackgroundColor(Color.parseColor("#3131c5")); 
tv.setGravity(Gravity.CENTER); 
tv.invalidate(); 
root.addView(tv); 
GravityDecorator gd = new GravityDecorator(tv, getApplicationContext()); 
root.addView(gd); 

수 있습니다 감사합니다. 부모에게보기를 추가 한 다음 drawingCache을 가져 오십시오.

public class GravityDecorator extends View{ 
    private View view; 
    private Paint paint= new Paint(); 

    public GravityDecorator(View view,Context context) { 
     super(context); 
     this.view = view; 
     view.setDrawingCacheEnabled(true); 
     view.layout(0, 0,600,500); 
     this.layout(0, 0,600,500); 
     invalidate(); 
    } 

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

     Bitmap bmp = view.getDrawingCache(); 

     canvas.drawBitmap(bmp, 0, 0, paint);  
     view.destroyDrawingCache(); 
     if(root.indexOfChild(tv) != -1) 
      root.removeView(tv); 


    } 

} 
+0

이것은 TextView의 내용을 가운데에 표시하지만 크기는 "wrap_content"와 같습니다. 테두리 (상단, 왼쪽, 오른쪽, 아래쪽 또는 둥근)가있는 모든보기를 꾸미는 클래스를 구현하려고합니다. 따라서이 클래스는 다른 모든 코드없이 동작을 보여주기위한 예제 일뿐입니다. 패딩과 여백을 포함하여 경계를 사용하여 뷰를 장식하는 클래스입니다.하지만 중력은 아닙니다. – steffka

+0

얻는 비트 맵은 레이아웃 매개 변수 tv.setLayoutParams (새 LinearLayout.LayoutParams (300,200))를 제공하는 것과 정확히 동일한 높이입니다. – Triode

+0

오, 확인. 나는 그것을 놓쳤다. 고마워요! – steffka

관련 문제