2014-06-22 3 views
0

여러 화면을 지원하는 안드로이드에서 퍼즐을위한 UI를 만드는 데 문제가 있습니다! 원하는 퍼즐이 같은 것입니다 :. 각 셀에서 내가의 GridView를 사용여러 화면에서 퍼즐을 만들기위한 안드로이드 gridview

Puzzle

및 설정 이미지 (각 셀은 별개의 이미지가) 나는 (이 세포를 얼마나 세트 GRIDVIEW의 크기와 모르는 Row Height/Col Width)를 사용하지 않아도됩니다. 1 화면 비율과 세포에서 스트레칭한다

내가 무슨 짓을 : :( 이미지가 하나 있습니다.

row_grid.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="300dp" 
     android:layout_height="100dp" 
     android:padding="0dp" > 

     <ImageView 
      android:id="@+id/item_image" 
      android:layout_width="100dp" 
      android:layout_height="100dp" 
      android:scaleType="fitXY" 
      android:src="@drawable/icon2" > 
     </ImageView> 
</FrameLayout> 

Activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/katy"> 

    <GridView 
     android:id="@+id/gridView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:horizontalSpacing="0dp" 
     android:numColumns="2" 
     android:stretchMode="columnWidth" 
     android:verticalSpacing="0dp" > 

    </GridView> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom" 
     android:text="TextView" 
     android:textSize="30sp" /> 

</FrameLayout> 

MainActivity.java

package com.example.test; 

import java.util.ArrayList; 

import android.R.dimen; 
import android.R.integer; 
import android.os.Bundle; 
import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Point; 
import android.view.Display; 
import android.view.Menu; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.Window; 
import android.widget.Button; 
import android.widget.FrameLayout; 
import android.widget.GridView; 
import android.widget.TextView; 


public class MainActivity extends Activity { 
    GridView gridView; 
    ArrayList<Item> gridArray = new ArrayList<Item>(); 
    CustomGridViewAdapter customGridAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     //Remove App TitleBar 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final TextView txt = (TextView) findViewById(R.id.textView1); 
     txt.setText(Integer.toString(width)+" x "+Integer.toString(height)); 


     Bitmap block = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon1); 
     Bitmap block2 = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon2); 
     Bitmap block3 = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon3); 
     Bitmap block4 = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon4); 

     gridArray.add(new Item(block)); 
     gridArray.add(new Item(block2)); 
     gridArray.add(new Item(block3)); 
     gridArray.add(new Item(block4)); 

     gridView = (GridView) findViewById(R.id.gridView1); 

     ViewGroup.LayoutParams layoutParams = gridView.getLayoutParams(); 
     layoutParams.height = 300; //this is in pixels 
     layoutParams.width = 300; //this is in pixels 
     gridView.setLayoutParams(layoutParams); 


     customGridAdapter = new CustomGridViewAdapter(this, R.layout.row_grid, gridArray); 
     gridView.setAdapter(customGridAdapter); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

결과 :

result

가 어떻게 그것을 화면 크기와 해상도 독립적으로 할 수 있습니다! :(

편집 : 는 동적으로의 GridView의 너비를 변경하려고했으나 치명적인 예외가 발생했습니다 또한 내가이 시험

package com.example.test; 

import java.util.ArrayList; 

import android.R.dimen; 
import android.R.integer; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.res.Resources; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Point; 
import android.view.Display; 
import android.view.Menu; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.Window; 
import android.widget.Button; 
import android.widget.FrameLayout; 
import android.widget.GridView; 
import android.widget.LinearLayout; 
import android.widget.TextView; 


public class MainActivity extends Activity { 
    GridView gridView; 
    ArrayList<Item> gridArray = new ArrayList<Item>(); 
    CustomGridViewAdapter customGridAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     //Remove App TitleBar 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     //Get Screen Dimensions 
     Display display = getWindowManager().getDefaultDisplay(); 
     Point size = new Point(); 
     display.getSize(size); 
     int width = size.x; 
     int height = size.y; 

     final TextView txt = (TextView) findViewById(R.id.textView1); 
     txt.setText(Integer.toString(width)+" x "+Integer.toString(height)); 

     Bitmap block = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon1); 
     Bitmap block2 = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon2); 
     Bitmap block3 = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon3); 
     Bitmap block4 = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon4); 

     gridArray.add(new Item(block)); 
     gridArray.add(new Item(block2)); 
     gridArray.add(new Item(block3)); 
     gridArray.add(new Item(block4)); 

     gridView = (GridView) findViewById(R.id.gridView1); 

     //###### Change Height of cells #####// 
     LinearLayout rg = (LinearLayout) findViewById(R.layout.row_grid); 
     ViewGroup.LayoutParams rgparam = rg.getLayoutParams(); 
     rgparam.height = rgparam.width; 
     rg.setLayoutParams(rgparam);   

     customGridAdapter = new CustomGridViewAdapter(this, R.layout.row_grid, gridArray); 
     gridView.setAdapter(customGridAdapter); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

!.

customGridAdapter = new CustomGridViewAdapter(this, rg.getId(), gridArray); 

답변

1

상대 레이아웃에서보세요 I을 위의 이미지에서 상자 2는 상자 1의 오른쪽에 있고 부모보기의 맨 위에 정렬됩니다. 상자 1은 다음과 같을 것입니다. 부모의 왼쪽 위 및 왼쪽에 맞 춥니 다.

+0

화면 해상도에 따라 셀의 너비와 높이를 어떻게 정의 할 수 있습니까? 줄 수와 격자의 Col 수를 수정했습니다 (9x6) – Jessica

+0

캔버스/화면 높이와 너비를보고 적절히 나누었습니다. 그런 다음 Path 클래스를 사용하여 해당 치수를 기반으로 상자 모양을 만듭니다. 이미지와 동일한 배경색으로 상자를 채우고 각 상자 안에 이미지를 가운데에 배치 할 것입니다 (어떻게할지는 모르지만 다른 질문을 검색 할 때 질문을 보았습니다). 당신은 원래의 대답과는 다른 접근법 인이 일을하는 자신의 견해를 만들 것입니다. – Steven

+0

화면 크기에 따라 동적으로 "row_grid"레이아웃의 크기를 조정하려했지만 런타임 오류가 발생하여 응용 프로그램이 종료되었습니다 !!! – Jessica

1
Try with below code and check if its working or not? 



     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:tools="http://schemas.android.com/tools" 
       android:layout_width="100dp" 
       android:layout_height="100dp" 
       android:padding="0dp" > 

       <ImageView 
        android:id="@+id/item_image" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:scaleType="fitXY" 
        android:src="@drawable/ic_launcher" > 
       </ImageView> 

      </LinearLayout> 

    ------------------------------- 

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@drawable/background" > 

     <GridView 
      android:id="@+id/gridView1" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:horizontalSpacing="0dp" 
      android:numColumns="3" 
      android:stretchMode="columnWidth" 
      android:verticalSpacing="0dp" > 
     </GridView> 

    </RelativeLayout> 
+0

친절하게 감사드립니다. 나는 이것을 전에 시도했다. 모든 것이 좋지만 행 높이가 정확하지 않습니다! Gridview의 행 높이는 Cell 너비와 같아야하지만 원래 이미지 높이 (300px)와 같다고 생각합니다 !!! 이 결과는 다음과 같습니다. http://s1.uploads.im/GhseS.png – Jessica

+0

@Jessica 예, 편집 된 답변을 확인하고 확인한 후 작동합니다. 작동하지 않으면 작동하지 않습니다. 알고있다. 나는 다른 코드를 줄 것이다. –

+0

감사합니다. 불행히도 그것은 작동하지 않습니다! 이것 좀 봐 : http://i.imgur.com/nQ87UZa.png; 이미지의 오른쪽이 잘립니다! 또한 절대 너비와 높이 (100dp)를 사용하고 싶지 않습니다.row_grid.height를 row_grid.width와 같게 설정하려고 시도했지만 런타임 오류가 발생했습니다! – Jessica