2013-04-10 3 views
0

Когда я рисую DrawingCache TextView на другой холст View, гравитация TextView не влияет на вертикальное направление.TextViews Гравитация не работает вертикально

Здесь класс рисования 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):

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 вступает в силу только в горизонтальном направлении.

В чем причина и как обойти это, если это ошибка?

Спасибо

ответ

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); 

Может быть потому, что раскладка пары не получают набор для TextView Изначально. Попытайтесь добавить представление к родителям, а затем получите 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

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

  • Нет связанных вопросов^_^