Android Paint 안드로이드 그림판 만들기

 

activity_main.xml layout

<?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">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/draw_red_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="red" />

        <Button
            android:id="@+id/draw_blue_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="blue" />

        <Button
            android:id="@+id/draw_black_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="black" />

        <Button
            android:id="@+id/clear_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="clear" />




    </LinearLayout>

    <LinearLayout
        android:id="@+id/draw_linear"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"/>



</LinearLayout>

 

MainActivity.java

package com.example.paint1;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    class Point{
        float x;
        float y;
        boolean check;
        int color;

        public Point(float x, float y, boolean check,int color)
        {
            this.x = x;
            this.y = y;
            this.check = check;
            this.color = color;
        }
    }

    class MyView extends View
    {
        public MyView(Context context) { super(context); }

        @Override
        protected void onDraw(Canvas canvas) {
            Paint p = new Paint();
            p.setStrokeWidth(15);
            for(int i=1 ; i<points.size() ; i++)
            {
                p.setColor(points.get(i).color);
                if(!points.get(i).check)
                    continue;
                canvas.drawLine(points.get(i-1).x,points.get(i-1).y,points.get(i).x,points.get(i).y,p);
            }
        }
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            float x = event.getX();
            float y = event.getY();

            switch (event.getAction())
            {
                case MotionEvent.ACTION_DOWN:
                    points.add(new Point(x,y,false , color));
                case MotionEvent.ACTION_MOVE :
                    points.add(new Point(x,y,true , color));
                    break;
                case MotionEvent.ACTION_UP :
                    break;
            }
            invalidate();
            return true;
        }
    }

    ArrayList<Point> points = new ArrayList<Point>();
    Button draw_red_btn,draw_blue_btn,draw_black_btn,clearbtn;
    LinearLayout drawlinear;
    int color = Color.BLACK;

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

        final MyView m = new MyView(this);
        /* ----- 색 변경 ------ */
        findViewById(R.id.draw_red_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                color = Color.RED ;
            }
        });
        findViewById(R.id.draw_blue_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                color = Color.BLUE ;
            }
        });
        findViewById(R.id.draw_black_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                color = Color.BLACK ;
            }
        });

        clearbtn = findViewById(R.id.clear_btn);
        drawlinear = findViewById(R.id.draw_linear);
        clearbtn.setOnClickListener(new View.OnClickListener() { //지우기 버튼 눌렸을때
            @Override
            public void onClick(View v){
                points.clear();
                m.invalidate();
            }
        });
        drawlinear.addView(m);
    }
}

 

youtu.be/nWrZLYm_Ioc

 

앱을 끌 때 전면 테스트 광고를 띄우는 방법을 정리했습니다.

 

★ 구글 플레이 스토어에 미 출시된 앱에 테스트용으로 애드몹 광고를 다는 것이라면 애드몹에 가입되어있지 않아도 가능합니다.

★ 앱의 minSdkVersion는 16 이상이어야 합니다.

 

1. build.gradle(Module:app)에 다음 코드를 추가

dependencies {
    implementation 'com.google.android.gms:play-services-ads:19.0.0'
}

 

코드를 추가하고 나서 Sync now를 클릭해서 동기화해줍니다.

 

2. Manifest 파일의 <application> 태그 내에 다음 코드를 추가

<meta-data
            android:name="com.google.android.gms.ads.AD_MANAGER_APP"
            android:value="true"/>

 

3. activity_main.xml 수정

Button을 클릭했을 때, 전면광고를 띄우도록 만들게 하기 위해서 xml파일에 Button 컴포넌트를 추가했습니다.

<Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button"
        android:onClick="onClickButton"/>

 

4. MainActivity.java 수정

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;

public class MainActivity extends AppCompatActivity{

    private InterstitialAd mInterstitialAd;

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

        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
        mInterstitialAd.loadAd(new AdRequest.Builder().build());
    }

    public void onClickButton(View view){
        if (mInterstitialAd.isLoaded()) {
            mInterstitialAd.show();
        } else {
            Log.d("TAG", "The interstitial wasn't loaded yet.");
        }
    }

}

 

애드몹 테스트 광고코드: ca-app-pub-3940256099942544/1033173712

애드몹에 가입해서 실제코드를 넣어야 수익이 생깁니다. 

 

앱 밑에 작게 뜨는 배너 광고를 추가하고 테스트 광고를 띄우는 방법을 정리했습니다.

★ 구글 플레이 스토어에 미 출시된 앱에 테스트용으로 애드몹 광고를 다는 것이라면 애드몹에 가입되어있지 않아도 가능합니다.

★ 앱의 minSdkVersion는 16 이상이어야 합니다.

1. Manifest 파일의 <application> 태그 내에 다음 코드를 추가

<meta-data
	android:name="com.google.android.gms.ads.AD_MANAGER_APP"
	android:value="true" />

2. xml 코드를 아래와 같이 변경합니다.

스마트 배너는 다양한 기기에서 화면 크기와 방향에 관계없이 화면 폭에 꽉 차는 배너 광고를 렌더링하는 광고 단위입니다. 스마트 배너를 이용하면 사용 중인 기기의 방향에서 기기의 너비를 감지하여 그 크기에 맞춰 광고를 만들 수 있습니다.

스마트 배너에서는 3가지 광고 높이가 구현됩니다.

광고 높이화면 높이

32 dp ≤ 400 dp
50 dp > 400 dp 및 ≤ 720 dp
90 dp > 720dp

일반적으로 휴대전화의 스마트 배너의 높이는 세로 모드 50dp, 가로 모드 32dp입니다. 태블릿의 경우 두 가지 모드에서 모두 높이가 일반적으로 90dp입니다.

이미지 광고가 할당된 전체 공간을 차지할 만큼 크지 않은 경우에는 이미지가 중앙에 맞춰지고 양쪽 공간이 채워집니다.

XML에서 스마트 배너를 사용하려면 광고 크기에 SMART_BANNER 상수를 지정하고 AdView의 너비를 match_parent로 설정하세요. 예를 들면 다음과 같습니다.

 <com.google.android.gms.ads.AdView
   android:id="@+id/ad_view1"
      xmlns:ads="http://schemas.android.com/apk/res-auto"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      ads:adSize="SMART_BANNER"
      ads:adUnitId="ca-app-pub-3940256099942544/6300978111"
    </com.google.android.gms.ads.AdView>

3.MainActivity.java 에 아래의 코드를 추가합니다.

스마트 배너를 프로그래매틱 방식으로 만들려면 AdSize.SMART_BANNER를 광고 크기로 사용하세요.

public class MainActivity extends AppCompatActivity {

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

        AdView adView = (AdView)findViewById(R.id.ad_view1);
        AdRequest adRequest = new AdRequest.Builder().build();
        adView.loadAd(adRequest);
    }
}

 

문제[22회]3. 상권과 관련된 내용으로 틀린 것은?


① 상권은 점포의 매출이 발생하는 구역을 정의하는 공간 개념으로 상품이나 서비스의 종류에 따라 규모가 다르다.
② 일반적으로 상품이나 서비스의 구입 빈도가 낮을수록 상권의 규모는 작다.
③ 상권획정을 위한 접근법으로는 공간독점접근법, 시장침투접근법, 분산시장접근법이 있는데 고급 가구점과 같은 전문품점의 경우 분산시장접근법이 유용하다.
④ 컨버스(P. D. Converse)는 경쟁하는 두 도시에 각각 입지해 있는 소매시설간 상권의 경계지점을 확인할 수 있도록 레일리(W. J. Reilly)의 소매중력모형을 수정했다.
⑤ 허프(D. L. Huff)는 상권분석에서 결정론적인 접근보다 확률론적인 접근이 필요하다고 보았다.",
      

정답②,
      
해설:"상권의 규모는 크다."

 

play.google.com/store/apps/details?id=com.jwlee.quiz_budongsan
    ,

 

기출 공인중개사 - Google Play 앱

부동산 공인중개사 기출문제 2011 ~ 2020년 기출문제 모음입니다. 문제 풀이할때 펜을 사용하여 풀 수 있는 기능도 있어요. 문제만 풀 수 있는 단순기능!! 귀찮은 회원가입이 전혀 필요없습니다. 접

play.google.com

 

CountDownTimer countDownTimer = new CountDownTimer(30 * 1000, 1000) {
            public void onTick(long millisUntilFinished) {
                  //반복 실행 구문
                  turn++;

            }
            public void onFinish() {
                  //마지막 실행 구문
                  turn = 0;
            }
};

 autonext_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                countDownTimer.start(); //타이머 실행

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

                countDownTimer.cancel(); //타이머 종료

            }
        });



CountDownTimer 의 객체를 생성할때 매개변수는 2개입니다.  총 실행될 시간, 반복주기시간

 

CountDownTimer(30 * 1000, 1000) 에서 총 실행 시간은 30초 반복주기는 1초입니다.

 

단위는  ms이므로 1000이 1초가 됩니다. 

 

타이머를 실행하려면 countDownTimer.start()를 삽입하고 

 

타이머를 종료시 countDownTimer.cancel()를 삽입!! 

 

 

 

+ Recent posts