2012-04-19 18 views
6

Tengo una clase llamada SeatsPanel donde dibujo asientos (usando drawRect) en el método onDraw. El método onDraw usa Canvas como parámetro, pero ¿cómo se establece el tamaño del lienzo? La razón por la que hago esta pregunta es porque esta clase se está inflando en otra clase. Sé que el lienzo tiene el alto y el ancho predeterminados del teléfono, pero necesito hacerlo más pequeño. ¿Cómo puedo hacer esto?Cómo establecer el tamaño del lienzo?

Cualquier ayuda sería apreciada.

-Tolga-

+0

¿Qué quiere decir que usted quiere hacer el lienzo más pequeño? Normalmente, el tamaño del lienzo lo gestiona Android y depende del tamaño medido de la Vista. – Greg

+0

Bien, pero ¿cómo cambio el tamaño de la Vista? Estoy confundido, solo quiero cambiar el tamaño de esta clase. – Xarialon

+0

¿por qué necesita inflarlo? Cualquier razón – UVM

Respuesta

3

He tratado de implementar una aplicación simple que dibuja un rect negro dentro de la actividad principal, que se dibuja presionando un botón. Por ejemplo, en el MainActivity:

private Button button1; 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    button1=(Button)findViewById(R.id.button); 
    button1.setOnClickListener(new OnClickListener(){ 

      public void onClick(View v) { 
      switch(v.getId()){ 
       case R.id.button: 

        LinearLayout ll=(LinearLayout)findViewById(R.id.linearLayout1); 
        System.out.println(ll.getWidth()+" "+ll.getHeight()); 
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ll.getWidth(),ll.getHeight()); 
        YourView yourView = new YourView(getBaseContext()); 
        yourView.setBackgroundColor(Color.WHITE); 
        ll.addView(yourView,params); 
        break; 
      } 

     } 

    }); 

} 

Y en la clase YourView:

private Bitmap savedBitmap; 
public YourView(Context context) { 
    super(context); 
} 
public void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    System.out.println(canvas.getWidth()+" "+canvas.getHeight()); 

    Paint textPaint = new Paint(); 
    textPaint.setARGB(255, 0, 0, 0); 
    textPaint.setTextAlign(Paint.Align.RIGHT); 
    textPaint.setTextSize(11); 
    textPaint.setTypeface(Typeface.DEFAULT); 

    canvas.drawColor(Color.WHITE); 
    System.out.println(canvas.getWidth()); 
    System.out.println(canvas.getHeight()); 

    canvas.drawRect(200, 20, 500, 100, textPaint); 
} 

El main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Push the button and draw a Rect" /> 

<Button 
    android:id="@+id/button" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Button" /> 




<LinearLayout 
    android:id="@+id/linearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

</LinearLayout> 

+0

Me gusta este, pero lamentablemente no resuelve el problema que tengo ahora. Necesito cambiar el tamaño del lienzo en el método onDraw. – Xarialon

+0

Pruebe este nuevo método ... – Ant4res

+0

Cuando uso este método, la pantalla se pone blanca ...:/Ya no veo el contenido del método onDraw. – Xarialon

1

Puede que no sea aplicable en su caso, pero esto funciona para mí

Bitmap animation = BitmapFactory.decodeResource(mContext.getResources(), resourceId, mBitmapOptions); //Get a bitmap from a image file 

// Create a bitmap for the part of the screen that needs updating. 
Bitmap bitmap = Bitmap.createBitmap(animation.getWidth(), animation.getHeight(), BITMAP_CONFIG); 
bitmap.setDensity(DisplayMetrics.DENSITY_DEFAULT); 
Canvas canvas = new Canvas(bitmap); 

Esto establece el lienzo al tamaño del mapa de bits

+0

Esto no ayudará, necesito usar un método mejor para resolver el problema. – Xarialon

Cuestiones relacionadas