728x90
안녕하세요 오늘은 커스텀 View 와 WebView 를 활용한 예제를 만들어보겠습니다
커스텀 View 에 사용자가 그림을 그리면, 이를 WebView에 띄워보도록 하겠습니다
전체 코드 입니다.
1. MainActivity.java
먼저 커스텀 Drawing View 에서 그림을 그리고 이를 캐시 디렉터리에 저장합니다.
file 경로로 변환한 뒤에 intent 를 활용해 파일의 경로를 WebViewActivity 에 넘겨줍니다.
public class MainActivity extends AppCompatActivity {
private DrawingView drawingView;
private Button btnSaveAndOpen;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
drawingView = new DrawingView(this);
btnSaveAndOpen = new Button(this);
btnSaveAndOpen.setText("Save & Open in WebView");
btnSaveAndOpen.setOnClickListener(v -> saveAndOpen());
setContentView(drawingView);
addContentView(btnSaveAndOpen, new androidx.appcompat.widget.LinearLayoutCompat.LayoutParams(
androidx.appcompat.widget.LinearLayoutCompat.LayoutParams.WRAP_CONTENT,
androidx.appcompat.widget.LinearLayoutCompat.LayoutParams.WRAP_CONTENT));
}
private void saveAndOpen() {
Bitmap bitmap = Bitmap.createBitmap(drawingView.getWidth(), drawingView.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawingView.draw(canvas);
try {
// 이미지 파일을 앱의 캐시 디렉터리에 저장
File file = new File(getCacheDir(), "drawing.png");
FileOutputStream fos = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();
// file:// 경로로 변환
String filePath = "file://" + file.getAbsolutePath();
Intent intent = new Intent(this, WebViewActivity.class);
intent.putExtra("image_url", filePath);
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
// View 에 그림을 그리는 부분
class DrawingView extends View {
private Paint paint = new Paint();
private float x, y;
public DrawingView(MainActivity context) {
super(context);
paint.setColor(Color.BLACK);
paint.setStrokeWidth(10);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(x, y, 20, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
x = event.getX();
y = event.getY();
invalidate();
return true;
}
}
}
2. WebViewActivity.java
내부적으로 HTML 을 생성해서 Intent 로 전달 받은 이미지 Url 을 WebView 에 로딩합니다
public class WebViewActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
webView = new WebView(this);
setContentView(webView);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowFileAccess(true); // 파일 접근 허용
String imageUrl = getIntent().getStringExtra("image_url");
// URL 로그로 확인
Log.d("WebViewActivity", "Image URL: " + imageUrl);
String html = "<html><body><h1>Your Drawing</h1>" +
"<img src='" + imageUrl + "' width='100%' />" +
"</body></html>";
webView.loadDataWithBaseURL(null, html, "text/html", "UTF-8", null);
}
}
시연 영상 입니다.
감사합니다.
'안드로이드 자바' 카테고리의 다른 글
[JAVA][Android] 앱 내에서 배터리 상태 나타내기 (0) | 2025.02.20 |
---|---|
[JAVA][Android] CollapsingToolbarLayout 상단바 확장될 때만 클릭할 수 있는 버튼 만들기 (0) | 2025.02.16 |
[JAVA][Android] CollapsingToolbarLayout 상단바 확장/축소에 따라 상태바 색상 변경하기 (0) | 2025.02.16 |
[Java][Android] 터치 이벤트 좌표 추적하기 (0) | 2025.02.13 |
[JAVA][Android] RecyclerView에서 스와이프로 항목 삭제 (Undo 기능 포함) (0) | 2025.02.10 |