010 牌视图实现二

在说明牌视图以前,咱们先看下View的实现,代码以下:
java

/**
 * <p>Title: View.java</p>
 * <p>Description:视图基类 </p>
 * <p>Copyright: Copyright (c) 2007</p>
 * @author Tunie 
 * @date 2014年9月18日
 * @version 1.0
 */
public abstract class View extends JPanel {

	/** */
	private static final long serialVersionUID = 2671149288739472345L;

	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		refresh(g);
	}

	protected abstract void refresh(Graphics g);
}

View继承Jpanel并重写了paintComponent方法,新增了一个refresh抽象方法,这意味着所示继承了View的非抽象子类,必须实现该方法。至于为什么如此设计,我就不细说了,读者自行体会。
ide

如今咱们着重看一下CardView的refresh方法,其实现代码以下:设计

        @Override
	protected void refresh(Graphics g) {
		calcImage();
		Graphics2D g2d = (Graphics2D) g;
		g2d.drawImage(image, 0, 0, DEFAULT_WIDTH, DEFAULT_HEIGHT, null);
	}

没有什么特别的,主要要细看calcImage方法,代码以下:code

private void calcImage() {
		image = new BufferedImage(DEFAULT_WIDTH, DEFAULT_HEIGHT, BufferedImage.TRANSLUCENT);
		Graphics2D graphics2d = image.createGraphics();
		RoundRectangle2D rectangle2d = new RoundRectangle2D.Double(0, 0, DEFAULT_WIDTH-1, DEFAULT_HEIGHT-1 ,13 ,13);
		graphics2d.setColor(new Color(0xdddeee));
		graphics2d.draw(rectangle2d);
		
		graphics2d.setColor(Color.white);
		RoundRectangle2D rectangle2d1 = new RoundRectangle2D.Double(0.5, 0.5, DEFAULT_WIDTH-2, DEFAULT_HEIGHT-2 ,12 ,12);
		graphics2d.fill(rectangle2d1);
		
		if(card.isNotKing()) {
			String cardColor = ColorType.getDescription(card.getColorType()) + ".png";
			BufferedImage cardColorImage = AssertManager.getAssert(cardColor);
			int cardColorImageX = (DEFAULT_WIDTH - cardColorImage.getWidth())/2;
			int cardColorImageY = (DEFAULT_HEIGHT - cardColorImage.getHeight())/2;
			graphics2d.drawImage(cardColorImage, cardColorImageX, cardColorImageY, cardColorImage.getWidth(), cardColorImage.getHeight(), null);
		}
		
		int padding = 5;
		String type = card.getTypeImagePath();
		BufferedImage typeImage = AssertManager.getAssert(type);
		graphics2d.drawImage(typeImage, padding, padding, typeImage.getWidth(), typeImage.getHeight(), null);
		
		String listtleCardColor = ColorType.getDescription(card.getColorType()) + "_little.png";
		BufferedImage listtleCardColorImage = AssertManager.getAssert(listtleCardColor);
		int listtleCardColorImageX = padding + (typeImage.getWidth() - listtleCardColorImage.getWidth())/2;
		int listtleCardColorImageY = padding + typeImage.getHeight();
		
		if(!card.isBigKing() && !card.isSmallKing() ) {
			graphics2d.drawImage(listtleCardColorImage, listtleCardColorImageX, listtleCardColorImageY, listtleCardColorImage.getWidth(), listtleCardColorImage.getHeight(), null);
		}
		
		graphics2d.translate(DEFAULT_WIDTH, DEFAULT_HEIGHT);
		graphics2d.rotate(Math.toRadians(180));
		graphics2d.drawImage(typeImage, padding, padding, typeImage.getWidth(), typeImage.getHeight(), null);
		if(!card.isBigKing() && !card.isSmallKing() ) {
			graphics2d.drawImage(listtleCardColorImage, listtleCardColorImageX, listtleCardColorImageY, listtleCardColorImage.getWidth(), listtleCardColorImage.getHeight(), null);
		}
	}

看上去挺长的,其实重点在最后面的旋转绘制处理,这个点明白了,这张牌的视图实现就没有问题了。继承

相关文章
相关标签/搜索