package cn.androidy.thinking.game.pintu;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
/**
*
* @author mwping1324@163.com Created on 2015年1月20日 下午4:41:36
*/
public class JigsawView extends View {
private JigsawResManager jigsawResManager;
private Paint stepsTextPaint;
private Paint samplePicPaint;
private Bitmap sampleBitmap;
private BitmapShader shader;
private RectF samplePicRectF;
public JigsawView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public JigsawView(Context context) {
super(context);
init();
}
public void init() {
ScreenConfig.getInstance(getContext());
stepsTextPaint = new Paint();
stepsTextPaint.setAntiAlias(true);
stepsTextPaint.setColor(0xff000000);
stepsTextPaint.setTextSize(16 * ScreenConfig.getDensity());
samplePicPaint = new Paint();
samplePicPaint.setAntiAlias(true);
samplePicPaint.setColor(0xff000000);
}
@Override
protected void onDraw(Canvas canvas) {
if (jigsawResManager == null) {
super.onDraw(canvas);
return;
}
canvas.drawColor(0xffc2d7c2);
jigsawResManager.draw(canvas);
if (jigsawResManager.isGameComplete()) {
canvas.drawText("成功", 3 * ScreenConfig.getDensity(), jigsawResManager.getSourceBitmapHeight() + 100,
stepsTextPaint);
} else {
canvas.drawText("已使用步数:" + jigsawResManager.getStepTaken(), 3 * ScreenConfig.getDensity(),
jigsawResManager.getSourceBitmapHeight() + 20 * ScreenConfig.getDensity(), stepsTextPaint);
}
canvas.drawRoundRect(samplePicRectF, 12, 12, samplePicPaint);
}
public void setPicture(Bitmap decodeResource, int row, int col) {
Bitmap bmp = Bitmap.createScaledBitmap(decodeResource, 900, 900, false);
sampleBitmap = Bitmap.createScaledBitmap(decodeResource, 500, 500, false);
jigsawResManager = new JigsawResManager(bmp, row, col);
jigsawResManager.checkResult();
shader = new BitmapShader(sampleBitmap, BitmapShader.TileMode.REPEAT, BitmapShader.TileMode.REPEAT);
samplePicPaint.setShader(shader);
int left = 0;
int top = 1000;
int right = left + 500;
int bottom = top + 500;
samplePicRectF = new RectF(left, top, right, bottom);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getActionIndex();
switch (action) {
case MotionEvent.ACTION_DOWN:
// 得到触点的位置
if (jigsawResManager == null) {
return super.onTouchEvent(event);
} else {
jigsawResManager.onTouchEvent(event, this);
return false;
}
default:
break;
}
return super.onTouchEvent(event);
}
}