안드로이드 이론빡공 4
본문 바로가기
안드로이드(Android)

안드로이드 이론빡공 4

by KyeongMin 2020. 6. 10.
728x90
반응형

package com.threedpit.myevent;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textView);
        View view = findViewById(R.id.view);
        view.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
              /**
               *  onTouch라는 매소드는 뷰를 클릭 했을 떄  사용
               *  손으로 누르거나 떼거나 움직이는 경우
               *  여기서는 모션 이벤트의 객체로
               * */
            int action =  event.getAction();

            float curX = event.getX();
            float curY = event.getY();

            if(action == MotionEvent.ACTION_DOWN){ /**클릭 했을때*/
                println("손가락 눌림 : " + curX + curY);
            }else if(action==MotionEvent.ACTION_MOVE){/**움직였을때 */
                println("손가락 움직임 : " + curX + curY);
            }else if(action==MotionEvent.ACTION_UP){/**클릭을 땠을때*/
                println("손가락 뗌 : " + curX + curY);
            }
            return true; /**onTouch 라는 함수가 정상으로 동작했다*/
            }
        });
    }
    public void println(String data){
        textView.append(data+"\n");
    }
}

package com.threedpit.myevent;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    TextView textView;
       /**추가 한 부분--------------------------------------------*/ 
    GestureDetector detector;
       /**추가 한 부분--------------------------------------------*/ 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textView);
        View view = findViewById(R.id.view);
        view.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
              /**
               *  onTouch라는 매소드는 뷰를 클릭 했을 떄  사용
               *  손으로 누르거나 떼거나 움직이는 경우
               *  여기서는 모션 이벤트의 객체로
               * */
            int action =  event.getAction();

            float curX = event.getX();
            float curY = event.getY();

            if(action == MotionEvent.ACTION_DOWN){ /**클릭 했을때*/
                println("손가락 눌림 : " + curX + curY);
            }else if(action==MotionEvent.ACTION_MOVE){/**움직였을때 */
                println("손가락 움직임 : " + curX + curY);
            }else if(action==MotionEvent.ACTION_UP){/**클릭을 땠을때*/
                println("손가락 뗌 : " + curX + curY);
            }
            return true; /**onTouch 라는 함수가 정상으로 동작했다*/
            }
        });
       /**추가 한 부분--------------------------------------------*/ 
        detector = new GestureDetector(this, new GestureDetector.OnGestureListener() {
            @Override
            public boolean onDown(MotionEvent e) {
                println("onDwon호출됨");
                return true;
            }

            @Override
            public void onShowPress(MotionEvent e) {

            }

            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                return false;
            }

            @Override
            public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
                return false;
            }

            @Override
            public void onLongPress(MotionEvent e) {
                println("onLongPtess 호출됨");
            }

            @Override
            public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                println("onFling 호출됨"+velocityX+" , " +velocityY);
                return true;
            }
        });
        View view2 = findViewById(R.id.view2);
        view2.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                detector.onTouchEvent(event);
                return true;
            }
        });
       /**추가 한 부분--------------------------------------------*/ 
    }
    public void println(String data){
        textView.append(data+"\n");
    }
}

텍스트만 가로방향으로 바꿔주자.

package com.threedpit.myorientation;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        showToast("onCreate 호출");
    }

    @Override
    protected void onDestroy() {
        showToast("onDestory 호출");
        super.onDestroy();
    }

    public void showToast(String data){
        Toast.makeText(this,data,Toast.LENGTH_SHORT).show();
    }
}

대게 생명주기를 알고 있으면 쉽다. 정말 면접에서도 많이 물어볼 수 있습니다.

안드로이드에 입문했거나 한다면....

package com.threedpit.myorientation;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.os.PersistableBundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    String name;
    EditText editText;
    TextView textView2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        showToast("onCreate 호출");

        editText = findViewById(R.id.editText);
        textView2 = findViewById(R.id.textView2);

        Button btn = findViewById(R.id.button);
        if(btn!=null) {
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (editText != null) {
                        /**editText안에 문자가 들어가 있으면*/
                        name = editText.getText().toString();
                        /**editText안의 문자를
                         * 문자열로 바꿔서 name 스트링 변수에
                         * 넣는다.*/
                        showToast("사용자 입력값을 name 변수에 활당함");
                    }
                }
            });
        }
        /**protected void onCreate(Bundle savedInstanceState) {
         * 이부분을 보면 savedInstanceState 라는 변수가 있다.
         *     public void onSaveInstanceState(@NonNull Bundle outState) {
         *     여기의 이 번들 객체와 같다라고 생각하면된다.
         *
         */
        if(savedInstanceState!=null){
            if(textView2!=null){
                name =savedInstanceState.getString("name");
                /**이 번들 즉 savedInstanceState의 데이터를 빼달라는 함수*/
                textView2.setText(name);

                showToast("값을 복원했다."+ name);

            }
        }
    }

    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        /**번들은 어떤 데이터들을 담아주느것이라고 생각하자*/
        outState.putString("name",name);
        /**액티비티가  화면상에 없어지는 순간에
         * 이 함수가 호출되면서 이데이터가 어디에
         * 저장되는것이다.
         * 어떻게 보관하는가?...
         * */
    }

    @Override
    protected void onDestroy() {
        showToast("onDestory 호출");
        super.onDestroy();
    }

    public void showToast(String data){
        Toast.makeText(this,data,Toast.LENGTH_SHORT).show();
    }
}

 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity"
    android:background="#555DDF"
    >

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="세로방향"
        android:textColor="#FF0000"
        android:textSize="50sp"
        tools:layout_editor_absoluteX="113dp"
        tools:layout_editor_absoluteY="32dp"
        />

    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="72dp"
        android:ems="10"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.424"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="60dp"
        android:text="확인"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.421"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText" />
</androidx.constraintlayout.widget.ConstraintLayout>

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity"
    android:background="#555DDF"
    >

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="세로방향"
        android:textColor="#FF0000"
        android:textSize="50sp"
        tools:layout_editor_absoluteX="113dp"
        tools:layout_editor_absoluteY="32dp"
        />

    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="72dp"
        android:ems="10"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.424"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="60dp"
        android:text="확인"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.421"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText" />
</androidx.constraintlayout.widget.ConstraintLayout>

 

package com.threedpit.myorientaion2;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.res.Configuration;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public void onConfigurationChanged(@NonNull Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){
            /**위의 소스를 통해 위가 가로 방향인지 확인을 할 수 있다. */
            showToast("가로방향임");
        }else if(newConfig.orientation==Configuration.ORIENTATION_PORTRAIT){
            /**위의 소스를 통해 위가 세로 방향인지 확인을 할 수 있다. */
            showToast("세로방향임");
        }
    }
    public void showToast(String data){
        Toast.makeText(this, data,Toast.LENGTH_SHORT).show();
    }
}

저 부분을 잘 처리해주면 고정이 됩니다.

728x90
반응형

'안드로이드(Android)' 카테고리의 다른 글

안드로이드 이론 빡공 6  (0) 2020.06.11
안드로이드 이론빡공 5  (0) 2020.06.10
안드로이드 이론빡공 3  (0) 2020.06.09
안드로이드 이론빡공 2  (0) 2020.06.09
안드로이드 이론빡공 1  (0) 2020.06.09

댓글