Android益智游戏的布局

时间:2016-06-05 17:39:53

标签: java android android-imageview puzzle

我尝试制作一个简单的应用程序,如拼图。我想将图像划分为四个,九个,十六个......但是当我将这些块放在imagesView中时,它看起来是无序的,并且具有不同的大小,有些在布局中没有显示。此外,块出现在第一行,我需要块改变行。

我的代码:

的活动:

package com.example.jessi.moopooh;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Point;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.widget.GridLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;

public class prueba_dividir_imagen2 extends Activity {

    private int tamano = 3;
    private GridLayout layoutPuzle;
    private LinearLayout base;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_prueba_dividir_imagen2);
        base = (LinearLayout) findViewById(R.id.rl);
        base.setBackgroundColor(Color.CYAN);
        layoutPuzle = new GridLayout(this);
        layoutPuzle.setColumnCount(tamano);
        layoutPuzle.setBackgroundColor(Color.RED);
        layoutPuzle.setUseDefaultMargins(true);

        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);


//        Drawable imagenPuzle = ResourcesCompat.getDrawable(getResources(),R.drawable.cow,null);
        Bitmap imagenPuzle = BitmapFactory.decodeResource(getResources(), R.drawable.cow);

        //TODO Antes de hacer esto habria que recibir las filas y columnas
        //TRATAMIENTO DE LA IMAGEN


        imagenPuzle = Bitmap.createScaledBitmap(imagenPuzle,size.x,size.y,false);

        int ancho = imagenPuzle.getWidth();
        int alto = imagenPuzle.getHeight();

        int anchoPieza = ancho/tamano;
        int altoPieza = alto/tamano;

        ArrayList<Bitmap> piezasPuzle = new ArrayList<Bitmap>();

        for(int i = 0; i < tamano;i++){
            for (int j = 0; j < tamano;j++){
                Log.d("Density:",Integer.toString(getResources().getDisplayMetrics().densityDpi));
                Bitmap pieza = Bitmap.createBitmap(imagenPuzle,j*anchoPieza,i*altoPieza,anchoPieza,altoPieza);
                int tamanoX = anchoPieza * (getResources().getDisplayMetrics().densityDpi/480);
                int tamanoY = altoPieza * (getResources().getDisplayMetrics().densityDpi/480);
                Log.d("Tamapo:",Integer.toString(getResources().getDisplayMetrics().densityDpi));
                piezasPuzle.add(Bitmap.createScaledBitmap(pieza,tamanoX,tamanoY,false));
            }
        }
        Collections.shuffle(piezasPuzle);
        for(int i = 0; i < Math.pow(tamano,2);i=i+tamano){
            for(int j = i;j < i+tamano;j++){
                ImageView pieza = new ImageView(this);
                pieza.setImageBitmap(piezasPuzle.get(j));
                pieza.setMaxHeight(1);
                pieza.setMaxWidth(1);

                layoutPuzle.addView(pieza);
            }
        }
        base.addView(layoutPuzle);

//            pieza.setLayoutParams(new android.view.ViewGroup.LayoutParams(80,60));
//            pieza.setMaxHeight(10);
//            pieza.setMaxWidth(10);
    }
}

XML文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.jessi.moopooh.prueba_dividir_imagen"
    android:id="@+id/rl"
    android:orientation="horizontal">

</LinearLayout>

1 个答案:

答案 0 :(得分:0)

对ImageView使用scaleType = FITXY