原 Android实现图片切分与拼合


package com.example.uitest;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
 
import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Bitmap.Config;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
 
public class MainActivity extends Activity {
    ImageView mImage;
    ImageView mImage2;
    private int X_SPLIT = 4;
    private int Y_SPLIT = 4;
    Bitmap pre = null;
    List<ImagePiece> pieces = null;
    int pieceWidth;
    int pieceHeight;
    int mCurMax;
    int mCurIndex;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = (Button) findViewById(R.id.button1);
        mImage = (ImageView) findViewById(R.id.image);
        mImage2 = (ImageView) findViewById(R.id.image2);
        btn.setOnClickListener(new View.OnClickListener() {
 
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent i = new Intent();
                i.setClass(MainActivity.this, SecondActivity.class);
                MainActivity.this.startActivity(i);
            }
        });
        Resources res = getResources();
        final Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.tt);
 
        pieces = new ArrayList<ImagePiece>(X_SPLIT * Y_SPLIT);
        pieces = ImageSplitter.split(bmp, X_SPLIT, Y_SPLIT);
        int width = bmp.getWidth();
        int height = bmp.getHeight();
        pieceWidth = width / X_SPLIT;
        pieceHeight = height / Y_SPLIT;
        mCurMax = X_SPLIT * Y_SPLIT;
        mCurIndex = 1;
        for (int i = 0; i < Y_SPLIT; i++) {
            for (int j = 0; j < X_SPLIT; j++) {
                ImagePiece piece = new ImagePiece();
                piece.index = j + i * X_SPLIT;
                int xValue = j * pieceWidth;
                int yValue = i * pieceHeight;
                piece.bitmap = Bitmap.createBitmap(bmp, xValue, yValue,
                        pieceWidth, pieceHeight);
                pieces.add(piece);
            }
        }
 
        pre = pieces.get(0).bitmap;
 
        mImage.setBackgroundResource(R.drawable.tt);
        timer.schedule(task, 2000, 2000); // 1s后执行task,经过1s再次执行
        mImage2.setBackgroundDrawable(new BitmapDrawable(pre));
    }
 
    Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            if (msg.what == 1 && mCurIndex < X_SPLIT * Y_SPLIT) {
                // tvShow.setText(Integer.toString(i++));
                int i = mCurIndex / X_SPLIT;//1
                int j = mCurIndex % Y_SPLIT;//0
                Bitmap second = pieces.get(mCurIndex).bitmap;
                Bitmap result = Bitmap.createBitmap(pieceWidth * Y_SPLIT,
                        pieceHeight * (i + 1), Config.ARGB_8888);
                Canvas canvas = new Canvas(result);
                canvas.drawBitmap(pre, 0, 0, null);
                //mImage.setBackgroundDrawable(new BitmapDrawable(result));
                canvas.drawBitmap(second, pieceWidth * j, pieceHeight * i, null);
                mImage2.setBackgroundDrawable(new BitmapDrawable(result));
                pre = result;
                mCurIndex++;
                super.handleMessage(msg);
            }
            super.handleMessage(msg);
        };
    };
    Timer timer = new Timer();
    TimerTask task = new TimerTask() {
 
        @Override
        public void run() {
            // 需要做的事:发送消息
            Message message = new Message();
            message.what = 1;
            handler.sendMessage(message);
        }
    };
}
--------------------- 
作者:new_abc 
来源:CSDN 
原文:https://blog.csdn.net/new_abc/article/details/47726883 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/leansmall/article/details/84678548