2012-04-11 42 views
0

私は多大な努力を払っていますが、私の問題に対する解決策は見つかりませんでした。複数のビューを作成し、それらをLinearLayoutに追加しようとすると、最初のビュー(ケーキ)だけが表示されます。Android - 複数の表示が表示されない(最初の表示のみが表示されます)

ここで私はビューを作成して追加します。

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

は、ここで私は、単一のビューを作成し、細かいことができ、私の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> 

ですが、私は複数のビューのLinearLayoutを追加することができません。どうしてこれなの?

答えて

0

hereと表示された場合、基本的に同じ問題を抱えている別の人がいました。しかし、彼らは彼らのレイアウトの方向を宣言していないので、デフォルトに水平になっています。レイアウトでは、明示的に水平を宣言しています。これは意図されていますか(たとえば、項目を横に並べて表示するなど)ですか?そうでない場合は、向きを垂直に変更してください。

あなたがそれらを並べて表示する必要がある場合、私はそれを行う方法を私の頭の上から分かっていませんが、私はそれを前に置かれたビューの隣にそれぞれのビューを宣言する必要があると思います(例えば「alignToRightOf」のようなものを使用しては。繰り返しますが、これは単に刺し・イン・ザ・ダークですが、それはあなたが正しい道に行くことがあります。

この情報がお役に立てば幸いです。

0

私がに答えを見つけました複数のビューを個別に描画するには、配列に追加した各ビューをループし、カスタムビューでオーバーライドされた描画メソッドを呼び出す必要があります。これを理解した後、私はビューを処理する方法を完全に理解していませんでした。複数のビューを作成して区切りを追加することができました各ビューに機能をドラッグして食べました。ここにコードがあります。

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

これは、Androidバージョン2.1 APIのために書かれている7

関連する問題