별의 공부 블로그 🧑🏻‍💻

스크롤뷰

Programming/Android 2017. 1. 17. 20:20
728x90
728x170

- 안드로이드에서는 다른 언어에서처럼 스크롤바를 일일이 뷰의 보이는 영역과 연결하는 과정 없이 단순히 스크롤뷰 안에 뷰를 넣는 것으로 스크롤이 가능함.

- 스크롤뷰에 뷰를 넣기 위해서는 ScrollView 태그를 사용하며 그 안에는 한 개의 뷰가 들어갈 수 있음.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 
    <Button
        android:id="@+id/button01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="이미지 바꾸어 보여주기"
        android:onClick="onButton1Clicked"
        />
    
    <HorizontalScrollView // 수평 스크롤을 위한 스크롤뷰
        android:id="@+id/horScrollView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >
        <ScrollView // 수직 스크롤을 위한 스크롤뷰
            android:id="@+id/scrollView01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            >
            <ImageView  
                android:id="@+id/imageView01"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                />
        </ScrollView>    
    </HorizontalScrollView>
 
</LinearLayout>
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package org.androidtown.ui.scrollview;
 
import android.content.res.Resources;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ScrollView;
 
public class MainActivity extends AppCompatActivity {
 
    ScrollView scrollView01;
    ImageView imageView01;
    BitmapDrawable bitmap;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        scrollView01 = (ScrollView) findViewById(R.id.scrollView01);
        imageView01 = (ImageView) findViewById(R.id.imageView01);
        Button button01 = (Button) findViewById(R.id.button01);
 
        // 가로 스크롤뷰의 메소드 호출
        scrollView01.setHorizontalScrollBarEnabled(true);
 
        // drawable 리소스에 있는 이미지를 가져와서 이미지뷰에 설정하기
        Resources res = getResources();
        bitmap = (BitmapDrawable) res.getDrawable(R.drawable.image01);
        int bitmapWidth = bitmap.getIntrinsicWidth();
        int bitmapHeight = bitmap.getIntrinsicHeight();
 
        imageView01.setImageDrawable(bitmap);
        imageView01.getLayoutParams().width = bitmapWidth;
        imageView01.getLayoutParams().height = bitmapHeight;
 
    }
 
    /**
     * 버튼을 눌렀을 때 이미지 바꾸어 보여주기
     * @param v
     */
    public void onButton1Clicked(View v) {
        changeImage();
    }
 
    /**
     * 다른 이미지로 바꾸어 보여주기
     */
    private void changeImage() {
 
        Resources res = getResources();
        bitmap = (BitmapDrawable) res.getDrawable(R.drawable.image02);
        int bitmapWidth = bitmap.getIntrinsicWidth();
        int bitmapHeight = bitmap.getIntrinsicHeight();
 
        imageView01.setImageDrawable(bitmap);
        imageView01.getLayoutParams().width = bitmapWidth;
        imageView01.getLayoutParams().height = bitmapHeight;
 
    }
 
}
 
cs

 

- getIntrinsicWidth()getIntrinsicHeight() 메소드를 이용하면 원본 이미지의 가로와 세로 크기를 알 수 있으며, 이렇게 알아낸 가로와 세로의 크기값은 이미지뷰에 설정된 LayoutParams 객체의 width와 height 속성을 이용해 설정할 수 있음.

- changeImage() 메소드는 화면의 상단에 추가된 버튼을 눌렀을 때 이미지뷰에 들어갈 이미지를 바꿔주는 역할을 함. → 메인 액티비티를 초기화하는 onCreate() 안의 코드와 유사한 코드가 들어가 있음.

 

출처 : Do It! 안드로이드 앱 프로그래밍 (정재곤 지음, 이지스퍼블리싱)

728x90
그리드형(광고전용)

'Programming > Android' 카테고리의 다른 글

수명주기  (0) 2017.01.24
레이아웃 인플레이션  (0) 2017.01.18
기본 위젯들  (0) 2017.01.17
프레임 레이아웃과 뷰의 전환  (0) 2017.01.17
테이블 레이아웃  (0) 2017.01.17
상대 레이아웃  (0) 2017.01.17
리니어 레이아웃  (0) 2017.01.16
레이아웃  (0) 2017.01.16
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖