[안드로이드&자바]자바와 안드로이드 자바 간 비교

2023. 1. 15. 19:03모바일프로그래밍/안드로이드

728x90

일반적으로 자바와 안드로이드 자바는 자바라는 이름 하에서 비슷한 류라고 생각한다.

하지만 코딩의 방식은 다를 수 있다라는 생각이 들 수 있다

 

다음은 몇가지 변환에 대해서 생각 해 보기로 한다.

 

0. 전제조건 Graphics2D 

다음은 전제 조건이다.

Graphics2D 객체인 g가 있고, Canvas 객체인 g가 있을 경우에 다음과 같이 사각형을 색칠 하려고 한다. 즉,

 

[Java] - java.awt.Graphics2D

Graphics2D g;
java.awt.​Color color;
 

[Android Java]​- android.graphics

Canvas g;​
​Paint Pnt = new Paint();​
Color color = new color
 

1. 사각형 색칠하기

[Java]

g.setColor(new Color(0x4379B7));
g.fillRect(0, 0, width, height);
 

그럼 안드로이드 자바에서는? 다음 정도가 될려나..

 

[Android Java]

Pnt.setColor(0x4379B7);
g.drawRect(0, 0, width, height, Pnt);
 

2. 이미지 그리기 drawImage, drawBitmap

일반적으로 많이 자바에서 많이 사용하는 방식은 BufferedImage를 생성하여 여기에다 그리고 Graphics2D를 사용해서 그리는 데, 안드로이드 자바에서다 그닥 다르지 않다.

 

[Java] drawImage

g.drawImage(bitmaps.island, 0, 0, null);
 

[Android Java] drawBitmap

g.drawBitmap(bitmaps.island, 0, 0, null);
 

3. 글자색 넣기 - drawString, drawText

[Java] drawString

g.setColor(new Color(0x000000));
g.drawString(str, (width - fm.stringWidth(str)) / 2 - i, height - 16 - i);
 

[Android Java] drawText

Pnt.setColor(0x000000);
g.drawText(str, (width - fm.stringWidth(str)) / 2 - i, height - 16 - i,Pnt);
 

4. 이미지에 대한 AffineTransform

자바는 이를 지원하는 AffineTransform 클래스가 있는 반면, 안드로이드는 Matrix 라는 클래스가 존재하는 걸로 알고 있으며, Canvas에서 이 클래스를 얻어서 사용 할 수 있다(getMatrix,setMatrix) 그렇지만 현재 이 메서드는 deprecated 되었으며, 구글에서는 Canvas에서 사용 할 수 있도록 AffineTransform을 지원하고 있다. 다음 코드를 보면 된다.

 

[Java]

AffineTransform af = g.getTransform();
g.translate(xCenter, yCenter);
g.scale(1.5, 1.5);
g.scale(1, 0.5);
g.rotate(-rot);
g.translate(-128, -128);
g.drawImage(bitmaps.island, 0, 0, null);
g.setTransform(af);
g.translate(xCenter, yCenter);
 

[Android Java]

g.translate(xCenter, yCenter);
g.scale(1.5f, 1.5f);
g.scale(1f, 0.5f);
g.rotate((float)-rot);
g.translate(-128, -128);
g.drawBitmap(bitmaps.island, 0, 0, null);
//g.setMatrix(g.getMatrix());
g.translate(xCenter, yCenter);
 

5. 이미지 생성

이것도 별반 다를것이 없으며, API를 참고 해서 살을 붙이면 되겠다.

 

[Java] - java.awt.image.BufferedImage;

BufferedImage image = new BufferedImage(256, 256, BufferedImage.TYPE_INT_ARGB);
 

[Android Java] - android.graphics.Bitmap

Bitmap image = Bitmap.createBitmap(256, 256, Bitmap.Config.ARGB_8888);
 

6. 글자그리기

[Java]

String s = "이것은 글이야"
FontMetrics fm = g.getFontMetrics();
g.setColor(new Color(0x477D8F));
g.drawString(s, x + 8 - fm.stringWidth(s) / 2 - i, y - i);
 

[Android Java]

Pnt.setColor(0x477D8F);
g.drawText(s, x + 8 - Pnt.measureText(s) / 2 - i, y - i,Pnt);
 

7. 이미지그리기​

이것도 별반 다를것이 없으며, 보통 큰 이미지에서 이미지를 클립해서 쓸때 사용되는 형태이다.

유의할 사항은 이미지를 칠할 때 자바와 안드로이드와의 차이가 강조된 것처럼 사용 할 수 있다는 것이다. 메서드의 시그너처 설명은 API를 참고 하여야 한다.

[Java] - javax.imageio.ImageIO

BufferedImage island = new BufferedImage(256, 256, BufferedImage.TYPE_INT_ARGB);
int[] pixels = new int[256*256];
ImageIO.read(Bitmaps.class.getResource("/island.gif")).getRGB(0, 0, 256, 256, pixels, 0, 256);
island.setRGB(0, 0, 256, 256, pixels, 0, 256);
 

[Android Java] - android.graphics.BitmapFactory

Bitmap island = Bitmap.createBitmap(256, 256, Bitmap.Config.ARGB_8888);​
Bitmap srcBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.island);
int[] pixels = new int[256*256];
​srcBitmap.getPixels(pixels, 0, 256, 0, 0, 256, 256);
island.setPixels(pixels, 0, 256, 0, 0, 256, 256);
 

 

8.BitMap 클래스와 BufferedImage 클래스

[Java] - javax.imageio.ImageIO

pin = ImageIO.read(Tools.getResource("res/img/search_pin.jpg"));

[Android Java] - android.graphics.BitmapFactory

pin 	= BitmapFactory.decodeResource(getResources(), R.drawable.search_pin);
 

 

9. Handler 클래스와 SwingUtilities.invokeLater()

[Android Java] - Handler & Thread

private class ConnectTask extends Thread{
	String url;
	
	public ConnectTask(String url) {
		super();
		this.url = url;
	}
	
	@Override
	public void run() {
		super.run();
		... 생략 ...
		Message msg = Message.obtain();
		msg.what = 200;
		msg.obj = object;
		mHandler.sendMessage(msg);
	}
}

private Handler mHandler = new Handler() {
	public void handleMessage(Message m) {
		if (m.obj != null) {
			... 뭔가 한다 ...
		}
		
		invalidate();
	}
};

 

[Java] - SwingUtilities.invokeLater()

 

 

10. Toast 클래스와 JFrame + Thread?

[Android Java] - Toast 

Toast.makeText(context, "더 이상 확대 할 수 없습니다.",2000).show();

[Java] 

 
 

Android Toast like message dialog in Java Swing

Android Toast like message dialog in Java Swing | Timer class delay | auto close dialog message close in java swing

jkoder.com

 

이렇게까지 해야 하는 지는 몰겠지만...

Toast.makeText("더 이상 확대 할 수 없습니다.", Toast.LENGTH_SHORT).start();
 
public static Timer makeText(String text, Object lengthShort) {
	final int TIME_VISIBLE = 3000; //in milliseconds
	JOptionPane pane = new JOptionPane(text, JOptionPane.INFORMATION_MESSAGE);
	final JDialog dialogErr = pane.createDialog(null, "Toast");
	dialogErr.setModal(false);
	dialogErr.setVisible(true);

	return new Timer(TIME_VISIBLE, new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent e) {
			dialogErr.setVisible(false);
		}
	});
}
 

이상.

 

 

 

728x90