문제출처: https://www.acmicpc.net/problem/1834




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Main {
    
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        long N = Long.parseLong(reader.readLine());
        long result = 0;
        int count = 1;
        
        while(count < N){
            result += N * count + count;
            count++;
        }
        
        System.out.println(result);
    }
}
cs


'Algorithm' 카테고리의 다른 글

백준 1339번: 단어 수학  (0) 2018.09.23
백준 1940번: 주몽  (0) 2018.09.23
백준 1780번: 종이의 개수  (0) 2018.08.08
백준 1992번: 쿼드트리  (0) 2018.08.08
Divide and Conquer (분할정복법)  (0) 2018.08.07

Source: https://www.edwith.org/boostcourse-android/lecture/20495/



1. 실행 결과 화면

  




2. AndroidManifest.xml

XML 레이아웃을 만들어 인플레이션하는 방식이 아니라 Manifest.xml에서 theme 속성으로 스타일을 지정하는 방식이다.

일반적으로 setContentView 를 이용하여 레이아웃을 만드는 것보다 테마를 이용해서 화면을 보여주는 것이 더 빠르다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tistory.qlyh8.practice">
 
    <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=".SplashActivity" android:theme="@style/SplashTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MainActivity"/>
    </application>
 
</manifest>
cs



3. values/styles.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<resources>
 
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
 
    <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowBackground">@drawable/splash_bg</item>
    </style>
 
</resources>
 
cs



4. res/drawable/splash_bg.xml

1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/splash_bg_gradient"/>
    <item android:top="210dp">
        <bitmap android:src="@drawable/image22" android:gravity="top"/>
    </item>
</layer-list>
cs



5. res/drawable/splash_bg_gradient.xml

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:startColor="#FF3E50B4"
        android:centerColor="#FF7288DB"
        android:endColor="#FF7288DB"
        android:angle="90"
        android:centerY="0.5"/>
 
    <corners android:radius="0dp" />
</shape>
cs



6. SplashActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.tistory.qlyh8.practice;
 
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
 
public class SplashActivity extends AppCompatActivity {
 
    Handler handler = new Handler();
 
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        // 2초 뒤에 main 화면이 보임
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                startActivity(new Intent(getApplicationContext(), MainActivity.class));
                finish();
            }
        }, 2000);
    }
}
 
cs



7. 참고

- Splash Sample: https://github.com/dudmy/blog-sample

- Material Design: https://material.io/design/

Source: https://www.edwith.org/boostcourse-android/lecture/17113/



1. 실행 결과 화면

  



2. activity_main.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.tistory.qlyh8.practice.MainActivity">
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="10dp"
        android:background="@android:color/holo_purple">
        <TextView
            android:id="@+id/text_view1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@android:color/white"
            android:textSize="25sp"
            android:text="Base Area" />
    </LinearLayout>
 
    <LinearLayout
        android:id="@+id/linear_layout"
        android:layout_width="200dp"
        android:layout_height="match_parent"
        android:padding="10dp"
        android:layout_gravity="end"
        android:background="@android:color/holo_orange_light"
        android:visibility="invisible">
        <TextView
            android:id="@+id/text_view2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@android:color/white"
            android:textSize="25sp"
            android:text="Slide Area" />
    </LinearLayout>
 
    <Button
        android:id="@+id/button"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|end"
        android:text="시작"/>
</FrameLayout>
 
cs



3. res/anim/trans_left.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<!--
fromXDelta, toXDelta: X 방향 이동
duration: 애니메이션이 얼마나 지속될 지 시간을 지정하는 속성
repeatCount: 애니메이션의 반복 횟수
fillAfter: 애니메이션 동작이 끝난 후에 원래의 모양대로 화면에 보여줄 것인지를 지정
1.5초 동안 뷰가 오른쪽에서 뷰의 원래 위치로 이동
-->
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="100%p"
        android:toXDelta="0%p"
        android:duration="1500"
        android:repeatCount="0"
        android:fillAfter="true"/>
</set>
cs



4. res/anim/trans_right.xml

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="utf-8"?>
<!-- 1.5초 동안 뷰가 오른쪽으로 이동 -->
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="0%p"
        android:toXDelta="100%p"
        android:duration="1500"
        android:repeatCount="0"
        android:fillAfter="true"/>
</set>
cs



5. MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package com.tistory.qlyh8.practice;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.LinearLayout;
 
 
public class MainActivity extends AppCompatActivity {
 
    LinearLayout layout;
    Button button;
    Animation transLeft, transRight;
    Boolean isPageOpen = false;
 
    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        layout = findViewById(R.id.linear_layout);
        button = findViewById(R.id.button);
        SlidingListener listener = new SlidingListener();
        transLeft = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.trans_left);
        transRight = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.trans_right);
        transLeft.setAnimationListener(listener);
        transRight.setAnimationListener(listener);
 
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(isPageOpen){
                    layout.startAnimation(transRight);
                } else {
                    layout.setVisibility(View.VISIBLE);
                    layout.startAnimation(transLeft);
                }
            }
        });
    }
 
    class SlidingListener implements Animation.AnimationListener {
        @Override
        public void onAnimationStart(Animation animation) {}
        @Override
        public void onAnimationEnd(Animation animation) { // 애니메이션이 끝날 때
            if(isPageOpen){
                layout.setVisibility(View.INVISIBLE);
                button.setText("열기");
                isPageOpen = false;
            } else {
                button.setText("닫기");
                isPageOpen = true;
            }
        }
        @Override
        public void onAnimationRepeat(Animation animation) {}
    }
}
cs



6. 참고

Slide between fragments using ViewPager: https://developer.android.com/training/animation/screen-slide

'Android' 카테고리의 다른 글

스플래시 화면 (Splash Screen)  (0) 2018.08.24
트윈 애니메이션 (Tween Animation)  (0) 2018.08.24
스레드 애니메이션 (Thread Animation)  (0) 2018.08.24
RecyclerView (리사이클러뷰)  (0) 2018.08.23
음성 녹음하기  (0) 2018.08.23

+ Recent posts