728x90
# 간단한 포토샵 기능
안드로이드 스튜디오에서 구현할 수 있는 간단한 갤러리 앱입니다.
# 준비물
- 갤러리 내용으로 사용할 이미지 대략 10개
# activity_main.xml
메인 액티비티의 화면을 구성합니다.
위치: project\app\res\layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
// 갤러리 이미지들을 격자로 배치합니다.
<GridView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/gridView"
android:gravity="center"
android:numColumns="4"
/>
</LinearLayout>
# dialog.xml
클릭 이미지가 보여질 액티비티의 화면을 구성합니다.
위치: project\app\res\layout 에서 신규 생성합니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent">
// 갤러리에서 클릭한 이미지가 이 곳에서
// 크게 보일 것입니다.
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/ivPic"/>
</LinearLayout>
# MainActivity.java
메인 액티비티의 기능을 구현합니다.
위치: project\app\java\"프로젝트명"\ 에 있습니다.
package com.sikuroku.p11_1_gallery;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("list view exam");
final GridView gv = findViewById(R.id.gridView);
MyGridAdapter gAdapter = new MyGridAdapter(this);
gv.setAdapter(gAdapter);
}
public class MyGridAdapter extends BaseAdapter{
Context context;
public MyGridAdapter(Context c){
context = c;
}
// 실제 이미지는 10개이지만, 갤러리에 풍성하게 보이기 위해
// 세 번 반복해서 붙여넣었습니다.
Integer[] picID = {
R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4, R.drawable.pic5,
R.drawable.pic6, R.drawable.pic7, R.drawable.pic8, R.drawable.pic9, R.drawable.pic10,
R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4, R.drawable.pic5,
R.drawable.pic6, R.drawable.pic7, R.drawable.pic8, R.drawable.pic9, R.drawable.pic10,
R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4, R.drawable.pic5,
R.drawable.pic6, R.drawable.pic7, R.drawable.pic8, R.drawable.pic9, R.drawable.pic10
};
// BaseAdapter를 상속받은 클래스가 구현해야 할 함수들은
// { getCount(), getItem(), getItemId(), getView() }
// Ctrl + i 를 눌러 한꺼번에 구현할 수 있습니다.
@Override
public int getCount() {
return picID.length;
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ImageView imageView = new ImageView(context);
imageView.setLayoutParams(new ViewGroup.LayoutParams(200,300));
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setPadding(5,5,5,5);
imageView.setImageResource(picID[i]);
// 갤러리의 이미지뷰를 눌렀을 때
// 다이얼로그뷰를 팝업하여 큰 이미지를 출력합니다.
final int pos = i;
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
View dialogView = View.inflate(MainActivity.this, R.layout.dialog, null);
AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.this);
ImageView ivPic = dialogView.findViewById(R.id.ivPic);
ivPic.setImageResource(picID[pos]);
dlg.setTitle("큰 이미지");
dlg.setIcon(R.drawable.ic_launcher);
dlg.setView(dialogView);
dlg.setNegativeButton("닫기", null);
dlg.show();
}
});
return imageView;
}
}
}
final int pos = i; 를 하는 이유에 대해서 아래 링크에서 확인바랍니다.
728x90
'안드로이드' 카테고리의 다른 글
[안드로이드] 간단한 MP3 플레이어 앱 만들기 (0) | 2022.12.21 |
---|---|
[안드로이드] SQLite 처음 사용해보기 (0) | 2022.12.12 |
[안드로이드] 간단한 투표 앱 만들기. intent.putExtra(), getExtra()를 활용. (0) | 2022.12.06 |
[안드로이드] 간단한 포토샵 앱 만들기 (0) | 2022.11.30 |
[안드로이드] 간단한 터치로 도형그리는 방법 (0) | 2022.11.28 |