본문 바로가기
JAVA/Android

[Andorid] follow me (화면 터치 시 이미지 따라옴)

by 개폰지밥 2021. 9. 16.
반응형

| follow me

설명 : 화면을 터치하고 움직이면 이미지가 따라오는 앱 개발

어플리케이션 이름은 Follow Me

어플리케이션 라벨은 나를 따라와1

 

Activity_main.xml에서 화면을 절대 좌표로 설정한다

Mainactivity.java는 터치 시에 아이콘이 터치 위치를 따라오도록 한다.

androidManifest.xml에는 스마트폰이 진동이 가능하도록 환경을 설정한다.

 

| String.xml

<resources>
    <string name="app_name">나를 따라와</string>
</resources>

 

| Activity_main.xml

?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        <!--이미지뷰의 소스를 drawable 폴더에 있는 "smile.png"로 지정-->
        android:src="@drawable/smile"
        <!--이미지 뷰의 id를 "smile"로 지정함-->
        android:id="@+id/smile" />

</RelativeLayout>

 

| Mainactivity.java

package com.example.followme;

import android.animation.ObjectAnimator;
import android.content.Context;
import android.os.Vibrator;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.WindowManager;
import android.widget.ImageView;

/*화면 상단에 상태 바(status bar)와 앱 바(app bar)가 나타나지 않는 full screen으로 만들기 위해 appcompatactivity를 수정함*/
public class MainActivity extends FragmentActivity{

    //이미지, xy 좌표, 진동 선언
    ImageView iv_smile;
    float previous_x = 0;
    float previous_y = 0;
    Vibrator mVibe;

    @Override
    /*메인 액티비티 자바 클래스가 호출될 때 처음 실행되는 메소드*/
    protected void onCreate(Bundle savedInstanceState) {
        /*액티비티 생성*/
        super.onCreate(savedInstanceState);
        /*activity_main.xml에서 정의된 화면 레이아웃을 액티비티에 출력*/
        setContentView(R.layout.activity_main);

        /*화면을 full screenㅇ로 만듬*/
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        /*id가 "smile'인 이미지를 인식함*/
        iv_smile=(ImageView)findViewById(R.id.smile);
        mVibe = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
    }

    /*터치 시에 시스템에 의해 호출됨*/
    public boolean onTouchEvent(MotionEvent event){
        switch(event.getAction()){
            /*누르기 시작하는 상태일 때*/
            case MotionEvent.ACTION_DOWN:
                break;

                /*터치하고 움직이는 상태일 때*/
            case MotionEvent.ACTION_MOVE:
                /*터치하고 있는 x,y 위치 인식*/
                int touch_x = (int)event.getX();
                int touch_y = (int)event.getY();

                ObjectAnimator smileX = ObjectAnimator.ofFloat(iv_smile, "translationX", previous_x, touch_x);
                smileX.start();

                ObjectAnimator smileY = ObjectAnimator.ofFloat(iv_smile, "translationY", previous_y, touch_x);
                smileY.start();

                /*50 밀리 초 동안 진동*/
                previous_x = touch_x;
                previous_y = touch_y;
                break;

                /*터치 후 손을 떼는 상태일 때*/
            case MotionEvent.ACTION_UP:
                break;
        }
        return false;

    }

}

 

| AndoridManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.followme">

    <!--진동이 가능한 상태로 함-->
    <uses-permission android:name="android.permission.VIBRATE"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"

        <!--어플리케이션 라벨-->
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <!--어플리케이션을 구성하는 액티비티 자바 클래스-->
        <activity android:name=".MainActivity">
           
            <!--앱 실행 시, MainActivity 자바 클래스가 처음 실행됨-->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 

| 결과

 

[관련 게시글]

[Android] 안드로이드 스튜디오 설치 : https://seul96.tistory.com/58
[Android] 바람개비 회전 애니메이션 : https://seul96.tistory.com/62
[Android] 화면터치 시 이미지 따라오기 : https://seul96.tistory.com/310
[Android] 그림 글 배치 : https://seul96.tistory.com/63
[Android] 글의 목록 만들기 : https://seul96.tistory.com/311
[Android] manifests, java, res / 레이아웃 유형 : https://seul96.tistory.com/64
[Android] toast 배경색 변경 방법 + 색상표 : https://seul96.tistory.com/65
[Android] 계산기 구현 : https://seul96.tistory.com/66
[Android] 위치 배열 gravity linear layout relative layout 사용 : https://seul96.tistory.com/67
[Android] 액티비티 전환 intent 예시 + 4대 컴포넌트 : https://seul96.tistory.com/68
[Android] 이벤트 처리와 액티비티간 이동 : https://seul96.tistory.com/70
[Android] 리스트뷰 : https://seul96.tistory.com/79
[Android] 커스텀 리스트뷰 : https://seul96.tistory.com/80
[Android] 안드로이드 공공데이터(API) 사용하는 방법 : https://seul96.tistory.com/85
[Android] Padding/layout_margin, visibility 속성 : https://seul96.tistory.com/312
반응형

댓글