スライディングパズルを作っています(右下隅を切り取った3x3 / 4x4 / 5x5)。ただし、パズルのピースの画像(sdcardの独自のギャラリーまたはアプリのデータベースから読み込まれる)をプログラムでカットすることからどこから始めればよいのかわかりません。私はインターネットを見てきましたが、何も助けにはなりませんでした。
この画像を切り取って新しいデータベースに保存する(そしてそれらをスライドさせることができる)ための最良の方法は何ですか?正しい方向に押すだけでよろしくお願いします。
PhotoGaffeアプリを確認してください。Googleコードで入手できます。
これにより、ユーザーは3x3、4x4、5x5、および6x6のパズルから選択できます。
これはあなたの仕事をするのに役立つかもしれません。
私が今取り組んでいるものからまっすぐに!
Bitmap main = BitmapFactory.decodeResource(getResources(), R.drawable.puzzle);
if( main.getHeight() > main.getWidth() ){
rescalefactor =((float)screenHeight)/main.getHeight();}
else {
rescalefactor = ( (float)screenWidth)/main.getWidth();
}
main = Bitmap.createScaledBitmap(main,(int)(main.getWidth()*rescalefactor),(int)(main.getHeight()*rescalefactor), false);
Bitmap cropped;
LinearLayout layout[] = new LinearLayout[rows];
int x=0,y=0,i=0,j=0,width=main.getWidth()/column,height=main.getHeight()/rows;
int count = 1;
for(i=0;i<rows;++i)
{
layout[i] = new LinearLayout(this);
for(j=0;j<column;++j)
{
cropped = Bitmap.createBitmap(main,x,y,width,height);
image[i][j] = new Tile(this);
image[i][j].setImageBitmap(cropped);
image[i][j].row =i;image[i][j].column =j;
image[i][j].setPadding(1, 1, 1, 1);
image[i][j].setOnClickListener(this);
image[i][j].setDrawingCacheEnabled(true);
image[i][j].setId(count); count++;
layout[i].addView(image[i][j]);
x += width;
}
x = 0; y += height;
root.addView(layout[i]);
}
これは、作業が実際に行われる行です。
cropped = Bitmap.createBitmap(main,x,y,width,height);
Tileクラスは非常に単純です。行フィールドと列フィールドを持つ単なる拡張ImageView:
public class Tile extends ImageView {
public int row, column;
public Tile(Context context)
{ super(context);}
}