만들고자 하는 것은 다음과 같은 것입니다.
앨범Title(TextView) 보기(Button)
사진들(GridView)
앨범Title(TextView) 보기(Button)
사진들(GridView)
앨범Title(TextView) 보기(Button)
사진들(GridView)
...
버튼을 누르면 GridView가 보였다 안보였다 하는 거죠.
위와 같은 custom View를 만들어서 여러개를 스크롤 뷰에 위치시켜서
스크롤 될수 있도록하고자 합니다.
(즉, gridview가 스크롤이 되는건 아니고 전체화면이 스크롤이 되는 방식입니다.)
그래서
앨범Title(TextView) 보기(Button)
사진들(GridView)
를 하나의 View로 만들기 위해서 XML 을 작성을 하고,
01.
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
02.
<
LinearLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
03.
android:orientation
=
"vertical"
04.
android:layout_width
=
"fill_parent"
05.
android:layout_height
=
"fill_parent"
06.
>
07.
<
LinearLayout
08.
android:layout_width
=
"fill_parent"
09.
android:layout_height
=
"fill_parent"
10.
android:orientation
=
"horizontal"
>
11.
<
TextView
12.
android:id
=
"@+id/gridtitle"
13.
android:layout_width
=
"wrap_content"
14.
android:layout_height
=
"wrap_content"
15.
android:text
=
"==Title=="
16.
/>
17.
<
Button
18.
android:id
=
"@+id/gridextend"
19.
android:layout_width
=
"wrap_content"
20.
android:layout_height
=
"wrap_content"
21.
android:text
=
"-"
22.
/>
23.
</
LinearLayout
>
24.
<
GridView
25.
android:id
=
"@+id/griditem"
26.
android:layout_width
=
"fill_parent"
27.
android:layout_height
=
"fill_parent"
28.
android:padding
=
"10dp"
29.
android:verticalSpacing
=
"10dp"
30.
android:numColumns
=
"auto_fit"
31.
android:columnWidth
=
"60dp"
32.
android:stretchMode
=
"columnWidth"
33.
android:scrollbars
=
"none"
34.
android:gravity
=
"center"
35.
/>
36.
</
LinearLayout
>
클래스 파일을 다음과 같이 작성을 했습니다.
001.
package com.android.GridTest;
002.
import android.content.Context;
003.
import android.graphics.Color;
004.
import android.util.AttributeSet;
005.
import android.view.LayoutInflater;
006.
import android.view.View;
007.
import android.view.ViewGroup;
008.
import android.widget.BaseAdapter;
009.
import android.widget.Button;
010.
import android.widget.GridView;
011.
import android.widget.ImageView;
012.
import android.widget.LinearLayout;
013.
import android.widget.ListAdapter;
014.
import android.widget.TextView;
015.
public
class
TitleGridView
extends
LinearLayout{
016.
TextView mTitle = null;
017.
Button mExtendBtn = null;
018.
GridView mItemGrid = null;
019.
Context mContext = null;
020.
021.
public
TitleGridView(Context context, AttributeSet attrs) {
022.
super(context, attrs);
023.
initTitleGridView(context);
024.
}
025.
026.
public
TitleGridView(Context context) {
027.
super(context);
028.
initTitleGridView(context);
029.
}
030.
031.
void initTitleGridView(Context context) {
032.
mContext = context;
033.
034.
String infService = Context.LAYOUT_INFLATER_SERVICE;
035.
LayoutInflater li = (LayoutInflater) getContext().getSystemService(infService);
036.
View v = li.inflate(R.layout.titlegridview, this, false);
037.
addView(v);
038.
039.
mTitle = (TextView) findViewById(R.id.gridtitle);
040.
mExtendBtn = (Button) findViewById(R.id.gridextend);
041.
mItemGrid = (GridView) findViewById(R.id.griditem);
042.
setAdapter(
new
ImageAdapter(mContext));
043.
044.
setFocusable(true);
045.
setFocusableInTouchMode(true);
046.
047.
setBackgroundColor(Color.BLUE);
048.
049.
mExtendBtn.setOnClickListener(
new
OnClickListener() {
050.
public
void onClick(View v) {
051.
if
(mExtendBtn.
getText
().toString().trim().equals(
"-"
)) {
052.
mExtendBtn.setText(
"+"
);
053.
mItemGrid.setVisibility(View.GONE);
054.
}
055.
else
{
056.
mExtendBtn.setText(
"-"
);
057.
mItemGrid.setVisibility(View.VISIBLE);
058.
}
059.
}
060.
});
061.
}
062.
063.
public
void setAdapter(ListAdapter adapter) {
064.
mItemGrid.setAdapter(adapter);
065.
}
066.
067.
public
class
ImageAdapter
extends
BaseAdapter {
068.
public
ImageAdapter(Context c) {
069.
mContext = c;
070.
}
071.
public
int getCount() {
072.
return
mThumbIds.length;
073.
}
074.
075.
public
Object getItem(int position) {
076.
return
position;
077.
}
078.
079.
public
long getItemId(int position) {
080.
return
position;
081.
}
082.
083.
public
View getView(int position, View convertView, ViewGroup parent) {
084.
ImageView imageView;
085.
if
(convertView == null) {
086.
imageView =
new
ImageView(mContext);
087.
imageView.setLayoutParams(
new
GridView.LayoutParams(45, 45));
088.
imageView.setAdjustViewBounds(false);
089.
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
090.
imageView.setPadding(8, 8, 8, 8);
091.
imageView.setBackgroundColor(Color.BLUE);
092.
}
else
{
093.
imageView = (ImageView) convertView;
094.
}
095.
imageView.setImageResource(mThumbIds[position]);
096.
return
imageView;
097.
}
098.
private
Context mContext;
099.
private
Integer[] mThumbIds = {
100.
R.drawable.sample_thumb_0, R.drawable.sample_thumb_1,
101.
R.drawable.sample_thumb_2, R.drawable.sample_thumb_3,
//1
102.
R.drawable.sample_thumb_4, R.drawable.sample_thumb_5,
103.
R.drawable.sample_thumb_6, R.drawable.sample_thumb_7,
//2
104.
R.drawable.sample_thumb_0, R.drawable.sample_thumb_1,
105.
R.drawable.sample_thumb_2, R.drawable.sample_thumb_3,
//3
106.
R.drawable.sample_thumb_4, R.drawable.sample_thumb_5,
107.
R.drawable.sample_thumb_6, R.drawable.sample_thumb_7,
//4
108.
R.drawable.sample_thumb_0, R.drawable.sample_thumb_1,
109.
R.drawable.sample_thumb_2, R.drawable.sample_thumb_3,
//5
110.
R.drawable.sample_thumb_4, R.drawable.sample_thumb_5,
111.
R.drawable.sample_thumb_6, R.drawable.sample_thumb_7,
//6
112.
R.drawable.sample_thumb_0, R.drawable.sample_thumb_1,
113.
R.drawable.sample_thumb_2, R.drawable.sample_thumb_3,
//7
114.
R.drawable.sample_thumb_4, R.drawable.sample_thumb_5,
115.
R.drawable.sample_thumb_6, R.drawable.sample_thumb_7,
//8
116.
R.drawable.sample_thumb_0, R.drawable.sample_thumb_1,
117.
R.drawable.sample_thumb_2, R.drawable.sample_thumb_3,
//9
118.
R.drawable.sample_thumb_4, R.drawable.sample_thumb_5,
119.
R.drawable.sample_thumb_6, R.drawable.sample_thumb_7,
//10
120.
};
121.
}
122.
}
main.xml은 다음과 같습니다.
01.
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
02.
<
ScrollView
xmlns:android
=
"http://schemas.android.com/apk/res/android"
03.
android:id
=
"@+id/myScroll"
04.
android:layout_width
=
"fill_parent"
05.
android:layout_height
=
"fill_parent"
06.
android:scrollbarStyle
=
"outsideInset"
07.
android:verticalSpacing
=
"10dip"
08.
>
09.
<
LinearLayout
10.
android:orientation
=
"vertical"
11.
android:layout_width
=
"fill_parent"
12.
android:layout_height
=
"fill_parent"
13.
>
14.
<
com.android.GridTest.TitleGridView
15.
android:id
=
"@+id/Grid1"
16.
android:layout_width
=
"fill_parent"
17.
android:layout_height
=
"fill_parent"
18.
/>
19.
<
com.android.GridTest.TitleGridView
20.
android:id
=
"@+id/Grid2"
21.
android:layout_width
=
"fill_parent"
22.
android:layout_height
=
"fill_parent"
23.
/>
24.
</
LinearLayout
>
25.
</
ScrollView
>
그런데 몇가지 문제가 있는데 우선 가장 큰 문제는 이미지가 나오질 안네요.
ImageAdapter의 getView는 호출이 되는데, 이미지가 나오지 않습니다.
이미지가 안나오는 이유를 도저히 모르겠습니다.
조언좀 부탁드리겠습니다.
'Programming > Android' 카테고리의 다른 글
[Android] 화면 캡쳐하기 (1) | 2010.08.14 |
---|---|
[Android] Dip을 고려한 실제 화면 해상도 PX값 (0) | 2010.08.14 |
[Android] 안드로이드 각종 정보 링크 (1) | 2010.08.12 |
[Android] 전체화면 사용( Status Bar, Title Bar 숨기기 ) (0) | 2010.08.11 |
[Android] 가로화면, 세로화면 전환시 문제점 (0) | 2010.08.11 |