2012-04-11 6 views
0

Ich habe viel gesucht und keine Lösung für mein Problem gefunden. Wenn ich mehrere Ansichten erstellt und versuche, sie zu einem LinearLayout hinzuzufügen, wird nur die erste Ansicht (Kuchen) angezeigt.Android- Mehrere Ansichten werden nicht angezeigt. (Nur die erste Ansicht wird angezeigt)

Hier ist, wo ich die Ansichten erstellen und hinzufügen.

@Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    LinearLayout linearLayout = (LinearLayout) findViewById(R.id.image_View); 

    PlayAreaView cake = new PlayAreaView(SecondTestActivity.this, R.drawable.cake); 
    views.add(cake); 
    PlayAreaView bomb = new PlayAreaView(SecondTestActivity.this, R.drawable.bomb); 
    views.add(bomb); 
    PlayAreaView crown = new PlayAreaView(SecondTestActivity.this, R.drawable.crown); 
    views.add(crown); 
    PlayAreaView scissors = new PlayAreaView(SecondTestActivity.this, R.drawable.cut); 
    views.add(scissors); 
    PlayAreaView trash = new PlayAreaView(SecondTestActivity.this, R.drawable.bin_closed); 
    views.add(trash); 
    PlayAreaView key = new PlayAreaView(SecondTestActivity.this, R.drawable.bullet_key); 
    views.add(key); 

    LayoutParams params 
    = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 

    for(View v : views){ 
     Log.v("created", "view created"); 
     v.setLayoutParams(params); 
     linearLayout.addView(v); 
    } 
} 

Hier ist meine main.xml

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/main_View" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
     <LinearLayout 
      android:id="@+id/image_View" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" > 
     </LinearLayout> 
    </FrameLayout> 

Ich kann eine einzige Ansicht erstellen und in Ordnung sein, aber ich bin nicht in der Lage mehrere Ansichten der die Linearlayout hinzuzufügen. Warum ist das?

Antwort

0

Wenn Sie here suchen, gab es eine andere Person mit im Grunde das gleiche Problem. Sie deklarierten jedoch nicht die Ausrichtung ihres Layouts, so dass sie in die Horizontale verschoben wurde. In Ihrem Layout haben Sie explizit horizontal deklariert. Ist das beabsichtigt (zum Beispiel, dass die Artikel nebeneinander angezeigt werden)? Wenn nicht, ändere die Ausrichtung auf vertikal und du solltest gut sein.

Wenn Sie sie nebeneinander anzeigen müssen, bin ich mir nicht sicher, wie das geht, aber ich würde annehmen, dass Sie jede Ansicht als neben der davor liegenden Ansicht deklarieren müssen (zB mit so etwas wie ‚alignToRightOf‘. Auch dies ist nur ein Stich-in-the-dark aber es kann man auf einem richtigen Weg bekommen würde.

hoffe, das hilft.

0

fand ich die Antwort auf Mein Problem: Ich habe nicht ganz verstanden, wie die Activity Ansichten behandelt. Um mehrere separate Ansichten zu zeichnen, muss ich jede Ansicht, die ich zu einem Array hinzufüge, durchlaufen und eine überschriebene Zeichenmethode in der benutzerdefinierten Ansicht aufrufen war in der Lage, mehrere Ansichten zu erstellen und Separ hinzuzufügen ate ziehen Funktionen auf jeder Ansicht. Hier ist der Code.

public class ThirdTestActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    LinearLayout layout = (LinearLayout) findViewById(R.id.main_View); 
    layout.addView(new MyCircles(this)); 
} 

private class MyCircles extends View{ 

    private Context myContext; 
    private ArrayList<MyCircle> circles = new ArrayList<MyCircle>(); 
    private int size = 10; 

    public MyCircles(Context context) { 
     super(context); 
     myContext = context; 
     addCircles(); 
    } 

    private void addCircles(){ 
     for (int i = 0; i < size; i++){ 
      circles.add(new MyCircle(myContext, R.drawable.skullcrossbones, i * 40, 50)); 
     } 
    } 

    @Override 
    protected void onDraw(Canvas canvas){ 
     for (View v : circles){ 
      v.draw(canvas); 
     } 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) 
    { 
     int mouseX = (int)event.getX(); 
     int mouseY = (int)event.getY(); 
     MyCircle image = null; 
     for(MyCircle images : circles){ 
      //Log.v("image checked X: " + images.imageX + ", Y: " + images.imageY, "checked"); 
      // Is the event inside of this view? 
      if(images.getImageRect().contains((int)event.getX(), (int)event.getY())) 
      { 
       image = images; 
      } 
     } 
     if (image != null){ 
      if(event.getAction() == MotionEvent.ACTION_DOWN) 
      { 
       Log.v("touched down", "touched down at X: " + mouseX + ", Y: " + mouseY); 
       image.dragDistance = new Point(mouseX, mouseY); 
       bringToFront(); 
       isSelected(); 
       return true; 
      } 
      else if(event.getAction() == MotionEvent.ACTION_MOVE) 
      { 
       Log.v("move", "moving to X: " + mouseX + ", Y: " + mouseY); 
       image.dragDistance.set(mouseX, mouseY); 
       invalidate(); 
       return true; 
      } 
     } 
     return super.onTouchEvent(event); 
    }  
} 

private class MyCircle extends View{ 

    private int imageId; 
    private Drawable image; 
    private Context myContext;  
    private int size = 48; 
    private int imageOffset = size/2; 
    private int imageX; 
    private int imageY; 
    private Point dragDistance; 

    public MyCircle(Context context, int id, int x, int y) { 
     super(context); 
     myContext = context; 
     imageId = id; 
     imageX = x; 
     imageY = y; 
     dragDistance = new Point(imageX + imageOffset, imageY + imageOffset); 
    } 

    public Rect getImageRect(){ 
     return image.getBounds(); 
    } 

    @Override 
    public void draw(Canvas canvas) { 
     //Log.v("draw","drawn"); 
     super.onDraw(canvas); 
     image = myContext.getResources().getDrawable(imageId); 
     imageX = (dragDistance.x - imageOffset); 
     imageY = (dragDistance.y - imageOffset); 
     image.setBounds(imageX, imageY, imageX + size, imageY + size); 
     image.draw(canvas); 
    } 
     } 
    } 

Dies ist für die Android-Version 2.1 API 7

geschrieben