0
Я стараюсь сделать легкое приложение, как головоломка. Я хочу разделить изображение в четыре, девять, шестнадцать ... но когда я кладу куски в imageView, он выглядит беспорядочным и разного размера, а некоторые не отображаются в макете. Кроме того, куски появляются в первом ряду, и мне нужно, чтобы куски меняли строку.Макет для Android-игры-головоломки
Мой код:
активность:
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>
http://stackoverflow.com/questions/12418618/split-image-into-clickable-regions – Hosseini
Вы можете использовать GridView –
Я использую GridView но я не получаю изображение не превышает границы. Я дал скриншот: https://gyazo.com/2a0ca9b2a79fd3623e3afd3159cfb010 –