我尝试制作一个简单的应用程序,如拼图。我想将图像划分为四个,九个,十六个......但是当我将这些块放在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>
答案 0 :(得分:0)
对ImageView使用scaleType = FITXY