'CustomView'에 해당되는 글 1건

  1. 2010.08.13 [Android] CustomView 만들기
posted by By훈트 2010.08.13 12:09
안녕하세요.
만들고자 하는 것은 다음과 같은 것입니다.

앨범Title(TextView) 보기(Button)
        사진들(GridView)

앨범Title(TextView) 보기(Button)
        사진들(GridView)

앨범Title(TextView) 보기(Button)
        사진들(GridView)

...

버튼을 누르면 GridView가 보였다 안보였다 하는 거죠.
위와 같은 custom View를 만들어서 여러개를 스크롤 뷰에 위치시켜서 
스크롤 될수 있도록하고자 합니다.
(즉, gridview가 스크롤이 되는건 아니고 전체화면이 스크롤이 되는 방식입니다.)

그래서
앨범Title(TextView) 보기(Button)
        사진들(GridView)
를 하나의 View로 만들기 위해서 XML 을 작성을 하고,

Custom 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>

클래스 파일을 다음과 같이 작성을 했습니다.
Custom View Java파일
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.