짱짱해커가 되고 싶은 나

04-5. 위젯3 본문

모바일

04-5. 위젯3

동로시 2021. 2. 16. 14:16

프로젝트1

스위치로 시작

좋아하는 안드로이드 버전 선택 -> 해당 버전의 아이콘 이미지

종료 버튼 ( 앱 종료)

처음으로 버튼

 

<activity_main.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"
    android:padding="20dp"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="선택을 시작하겠습니까?"
        android:textSize="20dp" />

    <Switch
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/switch_check"
        android:text="시작함"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="좋아하는 안드로이드 버전은?"
        android:id="@+id/text_question"
        android:visibility="invisible"
        android:textSize="20dp"/>

    <RadioGroup
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="invisible"
        android:id="@+id/rGroup">

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/rbtn1"
            android:text="오레오(8.0)"/>

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/rbtn2"
            android:text="파이(9.0)"/>

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/rbtn3"
            android:text="Q(10.0)"/>
    </RadioGroup>

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="200dp"
        android:layout_height="300dp"
        android:visibility="invisible" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="invisible"
        android:id="@+id/finish"
        android:text="종료"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="invisible"
        android:id="@+id/restart"
        android:text="처음으로"/>

</LinearLayout>

 

<MainActivity.java)

package com.example.widget3;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Switch;
import android.widget.TextView;

import org.w3c.dom.Text;

public class MainActivity extends AppCompatActivity {
    Switch start;
    TextView question;
    RadioGroup rGroup;
    RadioButton rbtn1, rbtn2, rbtn3;
    ImageView imageView;
    Button finish, restart;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("안드로이드 사진 보기");

        start = (Switch)findViewById(R.id.switch_check);
        question = (TextView)findViewById(R.id.text_question);
        rGroup = (RadioGroup)findViewById(R.id.rGroup);
        rbtn1 = (RadioButton)findViewById(R.id.rbtn1);
        rbtn2 = (RadioButton)findViewById(R.id.rbtn2);
        rbtn3 = (RadioButton)findViewById(R.id.rbtn3);
        imageView = (ImageView)findViewById(R.id.imageView);
        finish = (Button)findViewById(R.id.finish);
        restart = (Button)findViewById(R.id.restart);

        start.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked){
                    question.setVisibility(View.VISIBLE);
                    rGroup.setVisibility(View.VISIBLE);
                    finish.setVisibility(View.VISIBLE);
                    restart.setVisibility(View.VISIBLE);
                }
                else{
                    imageView.setVisibility(View.INVISIBLE);
                    rGroup.clearCheck();
                    question.setVisibility(View.INVISIBLE);
                    rGroup.setVisibility(View.INVISIBLE);
                    finish.setVisibility(View.INVISIBLE);
                    restart.setVisibility(View.INVISIBLE);
                }
            }
        });

        rGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch(checkedId){
                    case R.id.rbtn1:
                        imageView.setImageResource(R.drawable.oreo);
                        imageView.setVisibility(View.VISIBLE);
                        break;
                    case R.id.rbtn2:
                        imageView.setImageResource(R.drawable.pie);
                        imageView.setVisibility(View.VISIBLE);
                        break;
                    case R.id.rbtn3:
                        imageView.setImageResource(R.drawable.q);
                        imageView.setVisibility(View.VISIBLE);
                        break;
                    default:
                        imageView.setVisibility(View.INVISIBLE);
                }
            }
        });

        finish.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        restart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                start.setChecked(false);
            }
        });
    }
}

< 여기서 주의할 건 스위치 문에서 디폴트로 이미지 뷰를 없애는 걸 해줘야 한다. >

왜냐하면 초기화하는 걸 스위치를 false로 바꾸는걸로 해놨는데 이렇게 되면 스위치에서 이미지를 invisible로 바꾸고 체크를 클리어한다. 그래서  라디오 그룹에서 체크의 변화로도 나온다~ 이렇게 클리어 된 경우도 처리해줘야하기 때문 ^^!

& 스위치 체크 false에서 빼도 됨. 여기서 다 빼고 default에다가 옮겨놓는게 깔꼼할듯

 

프로젝트1

 

프로젝트2

버튼을 누를 때마다 10도씩 이미지 회전

 

<acitivity_main.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">

    <android.widget.Button
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_margin="50dp"
        android:id="@+id/btn"
        android:padding="10dp"
        android:text="회전하기"
        android:drawableLeft="@mipmap/ic_launcher"
        android:drawableRight="@mipmap/ic_launcher"
        android:textColor="#000000"
        android:background="#808080"/>

    <ImageView
        android:layout_margin="30dp"
        android:layout_width="350dp"
        android:layout_height="wrap_content"
        android:src="@drawable/flower"
        android:id="@+id/imageView"/>

</LinearLayout>

button 양 옆에 이미지를 넣을 때는 drawbleLeft랑 drawbleRight 속성을 이용하면 된다.

 

<MainActivity.java>

package com.example.widget4;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    Button btn;
    ImageView image;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("연습문제 4-9");

        btn = (Button)findViewById(R.id.btn);
        image = (ImageView)findViewById(R.id.imageView);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                image.setRotation(image.getRotation()+10);
            }
        });
    }
}

rotation을 변경할 때 setRotation 같은 경우 더해주는게 아니라 해당하는 각도로 돌리는 것이기 때문에 누를 때마다 각도가 변하려면 현재 로테이션 + 각 으로 사용해야한다.

프로젝트2

 

 

'모바일' 카테고리의 다른 글

06-1. 시간 관련 위젯  (0) 2021.02.17
05-1. 레이아웃  (0) 2021.02.17
04-4. 위젯2  (0) 2021.02.16
04-3. 간단한 계산기 앱  (0) 2021.02.15
04-2. 위젯  (0) 2021.02.15
Comments