스크롤
- 수직 스크롤
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="100dp"
android:text="나는 버튼1" />
<Button
android:layout_width="match_parent"
android:layout_height="100dp"
android:text="나는 버튼2" />
<Button
android:layout_width="match_parent"
android:layout_height="100dp"
android:text="나는 버튼3" />
</LinearLayout>
</ScrollView>
- 수평 스크롤
<?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<Button
android:layout_width="match_parent"
android:layout_height="100dp"
android:text="나는 버튼1" />
<Button
android:layout_width="match_parent"
android:layout_height="100dp"
android:text="나는 버튼2" />
<Button
android:layout_width="match_parent"
android:layout_height="100dp"
android:text="나는 버튼3" />
</LinearLayout>
</HorizontalScrollView>
- 사진 순차 바꾸기
- xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/btnChange"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="이미지 바꿔 보여주기"/>
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="wrap_content"
android:layout_height="match_parent">
<ImageView
android:id="@+id/img1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/image01"/>
</ScrollView>
</HorizontalScrollView>
</LinearLayout>
- java
package com.hk.scrollapp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
ImageView img1;
Button btnChange;
Integer[] imgs = {R.drawable.image01, R.drawable.image02,
R.drawable.lighthouse, R.drawable.penguins, R.drawable.tulips };
int count=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnChange = findViewById(R.id.btnChange);
img1 = findViewById(R.id.img1);
btnChange.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (count==4){
count=0;
};
img1.setImageResource(imgs[count+1]);
count++;
}
});
}
}
Spinner
= 어댑터 뷰 (콤보바와 유사)
=> 어댑터 (콤보목록박스) 장착 필요
- xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="영화 흥행 순위"
android:layout_gravity="center"
android:textSize="20dp"/>
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/txtStory"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:textSize="20dp"
android:layout_gravity="center"/>
<ImageView
android:id="@+id/imgs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
</LinearLayout>
- java
package com.hk.spinnerapp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Spinner spinner1;
String movies[]= {"써니","완득이","괴물","라디오스타", "비열한 거리",
"왕의 남자","아일랜드","웰컴투동막골","헬보이","백투더퓨처"};
String[] story = {"7공주 이야기","나만 가지고 왜 이래","한강에 나타난 괴물과 가족의 사투",
"진정한 스타","조폭","사극","복제","남북한","싸움","과거"};
TextView txtStory;
ImageView imgs;
Integer[] imgG = {R.drawable.mov01,R.drawable.mov02,R.drawable.mov03,R.drawable.mov04,R.drawable.mov05,R.drawable.mov06,
R.drawable.mov07,R.drawable.mov08,R.drawable.mov09,R.drawable.mov10};
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //xml 보여줌
spinner1=findViewById(R.id.spinner1);
imgs = findViewById(R.id.imgs);
txtStory = findViewById(R.id.txtStory);
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item, movies);
//this : 현재 액티비티의 스피너에 어댑터 장착, simple_spinner_item : 어댑터 모양
spinner1.setAdapter(adapter);
//스피너 자료선택
spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
///position : 어댑터 위치값 (movies[])
txtStory.setText(story[position]);
imgs.setImageResource(imgG[position]);
Toast.makeText(getApplicationContext(),movies[position]+"을(를) 선택했습니다.",Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
서울 관광지 지도 - 스피너, 구글맵연결
=> new empty google map project
console.developers.google.com/apis/
API 안드로이드 => 사용자 인증 정보
- xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.hk.seoultour1">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.SeoulTour1"
tools:targetApi="31">
<!--
TODO: Before you run your application, you need a Google Maps API key.
To get one, follow the directions here:
https://developers.google.com/maps/documentation/android-sdk/get-api-key
Once you have your API key (it starts with "AIza"), define a new property in your
project's local.properties file (e.g. MAPS_API_KEY=Aiza...), and replace the
"YOUR_API_KEY" string in this file with "${MAPS_API_KEY}".
-->
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="사용자 키" />
<activity
android:name=".MapsActivity"
android:exported="true"
android:label="@string/title_activity_maps">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
- activity_maps.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MapsActivity"
android:orientation="vertical">
<RadioGroup
android:id="@+id/rGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rdoNormal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="일반 지도"/>
<RadioButton
android:id="@+id/rdoHybrid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="위성 지도"/>
</RadioGroup>
<Spinner
android:id="@+id/spTour"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
- java
package com.hk.seoultour1;
import androidx.fragment.app.FragmentActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.hk.seoultour1.databinding.ActivityMapsBinding;
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
private ActivityMapsBinding binding;
RadioGroup rGroup;
RadioButton rdoNormal, rdoHybrid;
Spinner spTour;
int pos;
String seoul[] ={"이젠아카데미","국립중앙박물관","남산골 한옥마을",
"예술의 전당","청계천","63빌딩","서울타워","경복궁","김치문화체험관",
"서울올림픽기념관","국민민속박물관","서대문형무소역사관","창덕궁"};
// 위도(Latitude) 설정
Double lat[]={37.569845,37.5240867,37.5591447,37.4785361,37.5696512,
37.5198158,37.5511147,37.5788408,37.5629457,37.5202976,
37.5815645,37.5742887,37.5826041};
//경도(Longitude) 설정
Double log[]={126.984859,126.9803881,126.9936826,127.0107423,
127.0056375,126.9403139,126.9878596,126.9770162,126.9851652,
127.1159236,126.9789313,126.9562269,126.9919376};
ArrayAdapter<String> adapter;
Double[] tourLocation = new Double[2]; //현재 관광지 위도, 경도 배열
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMapsBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
rGroup = findViewById(R.id.rGroup);
rdoHybrid = findViewById(R.id.rdoHybrid);
rdoNormal = findViewById(R.id.rdoNormal);
spTour = findViewById(R.id.spTour);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item,seoul);
spTour.setAdapter(adapter);
spTour.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
tourLocation[0]=lat[position];
tourLocation[1]=log[position];
pos=position;
mapShow(tourLocation);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
//서울 관광 지도
public void mapShow(Double[] latlog){
LatLng tourLatlog = new LatLng(latlog[0],latlog[1]);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(tourLatlog,15));
mMap.addMarker(new MarkerOptions().position(tourLatlog).title(seoul[pos]));
}
}
//
실습하면서 느낀 점 : findview로 연결을 안 하는 등 사소한 실수를 해서 구현에 실패하는 경우가 있다. 로직을 짜는 것도 중요하지만 이런 실수들로 코드 완성 못하는 일은 만들지 말자.
'Programming > 국비학원' 카테고리의 다른 글
| 220603 - html (0) | 2022.06.05 |
|---|---|
| 220531 - 안드로이드 구현 실습 (AlertDialog) (0) | 2022.06.01 |
| 220526 - 안드로이드 구현 실습 (투표, 다이어리) (0) | 2022.05.30 |
| 220525 - 안드로이드 구현 실습 (멀티 액티비티, 성적 입력 계산, 투표) (0) | 2022.05.30 |
| 220524 - 안드로이드 구현 실습 (0) | 2022.05.25 |