-
androidμ±μ λ§λ€κΈ° μν μ»΄ν¬λνΈ, λꡬ λ° μ§μΉ¨ μΈνΈ
-
κΈ°μ‘΄ μ§μ λΌμ΄λΈλ¬λ¦¬μ μν€ν μ² μ»΄ν¬λνΈλ₯Ό νλλ‘ λͺ¨μμ, λ€μκ³Ό κ°μ΄ λ€κ°μ§ λ²μ£Όλ‘ λνλ
β
android jetpackμ κΈ°λ³Έ Android νλ«νΌμ μνμ§ μμ "λ³λμ" λΌμ΄λΈλ¬λ¦¬λ‘μ μ 곡λλ€.
λν android jetpackμ νΉμ λ²μ μ κ΄κ³ μμ΄ κΈ°λ₯μ μ 곡νλλ‘ λΉλλκ³ μ΄μ λ²μ κ³Όμ νΈνμ±μ μ 곡νκΈ° λλ¬Έμ, λ€μν λ²μ μ νλ«νΌμμ μ±μ μ€νν μ μλ€.
- WorkManager
- Navigation
- Paging
- Slices
- Android KTX
####μ©μ΄μ 리
- μ»΄ν¬λνΈ: μ μ κ° μ¬μ©νλ μμ€ν μ λν μ‘°μμ₯μΉ
- Android 6.0 Marshmallow μ΄ν, μ νμ μΈ κΆν λΆμ¬ λ°©μ μ±ν
- 6.0λ―Έλ§ λ²μ μμλ androidMainfest.xmlμ κΆνλ μ€μ νλ κ²λ§μΌλ‘ μꡬμ μΌλ‘ μ±μ κΆνμ μ νν μ μμμ§λ§, 6.0μ΄μμμλ λΉλκΈ°, μ½λ± ννλ‘ μ± μ€ν μμ μ± κΆνμ μΈμ λ μ§ μμ€ν μ€μ μμ μ·¨μν μ μμΌλ―λ‘, λ§€λ² νΉμ κΆνμ΄ νμν κΈ°λ₯μ μ€ννκΈ° μ μ λ°λμ κΆν νλ μ¬λΆλ₯Ό νμΈν΄μΌ νλ€λ μ μ΄ μλ€.
λ¨Όμ AndroidMainfest.xmlμ κΆνμ μ€μ ν ν
<uses-permission android:name="android.permission.CALL_PHONE" />
μ¬μ©μμ os λ²μ μ΄ λ§μλ©λ‘μ° μ΄μμΈμ§ 체ν¬νλ€.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
}
###3.Animation
μ λ맀μ΄μ μ μ¬μ©μμκ² μ±μ μ§ν μν©μ μ리λ μκ°μ λ¨μλ₯Ό μΆκ° ν μ μμ
UIκ° μνλ₯Ό λ°κΏλ μ μ©ν¨(μ μ λ΄μ©λ‘λ λλ μ μμ μ ν λ)
λ λμ νμ§μ 보μ¬μ§λ κ² μ²λΌ λλμ μ 곡ν¨
μμ΄μ½μ΄λ μΌλ¬μ€νΈλ μ΄μ κ³Ό κ°μ λΉνΈ 맡 κ·Έλν½μ μ λλ©μ΄μ μΌλ‘ λ§λ€λ €λ©΄ drawable animation APIλ₯Ό μ¬μ©ν΄μΌ νλ€.
μΌλ°μ μΌλ‘ μ΄λ¬ν μ λλ©μ΄μ μ drawable resourceλ‘ μ μ μΌλ‘ μ μ λ¨
runtimeμ μ λλ©μ΄μ μ λν νλμ μ μ ν μ μλ€.
μλ₯Ό λ€μ΄ μ¬μ λ²νΌμ ννλ©° μΌμ μ€μ§ λ²νΌμΌλ‘ λ³νλμ΄ λ μμ μ΄ κ΄λ ¨λμ΄ μλ€λ κ²μ μ¬μ©μμκ² μ리λ μ’μ λ°©λ²μ΄λ©΄ λ€λ₯Έ νλλ₯Ό λ리면 λ€λ₯Έ λ²νΌμ΄ νμλ©
#####- AnimationDrawable μ¬μ©
μ λλ©μ΄μ μ λ§λλ ν κ°μ§ λ°©λ²μ Drawablesν΄λμ μ¬μ§μ Drawble resouceμ μ°¨λλ‘ λ‘λνμ¬ μ λ맀μ΄μ μ λ§λλ κ²μ΄λ€. μ΄κ²μ νλ¦ λ‘€ μ²λΌ μμλλ‘ μ¬μλλ μ μμ μ ν΅μ μΈ μ λ맀μ΄μ μ΄λ€. AmimationDrawble ν΄λμ€λ Drawable μ λλ©μ΄μ μ κΈ°μ΄μ΄λ€.
AnimationDrawable ν΄λμ€ APIλ₯Ό μ¬μ©νμ¬ μ½λμμ μ λλ©μ΄μ νλ μμ μ μ ν μλ μμ§λ§ μ λλ©μ΄μ μ ꡬμ±νλ νλ μμ λμ΄νλ xmlνμΌλ‘ κ°λ¨νκ² μ¬μ©ν μ μμ΅λλ€.
xmlνμΌμ <animation-list>
λ£¨νΈ λ
Έλμ μμμ <item>
κ° νλ μμ μ μνλ μΌλ ¨μ νμ λ
Έλλ‘ κ΅¬μ±λ¨
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
<item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
<item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>
android:oneshot
μ μμ±μ trueλ‘ μ€μ νλ©΄ νλ μμ΄ ν λ²λ§ μν ν ν λ§μ§λ§ νλ μμ μ€μ§νκ³ μ μ§ ν©λλ€. falseλ‘ μ€μ νλ©΄ μ λλ©μ΄μ
μ΄ λ°λ³΅λ©λλ€.
AnimationDrawable rocketAnimation;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
//μ΄λ²€νΈ μ²λ¦¬ 리μ€λ λ©μλλ₯Ό ν΅ν΄μ νΉμ μ΄λ²€νΈ λ°μμ start() λ©μλλ‘ μ λλ©μ΄μ
μ μ€ννλ κ²μ΄ κ°λ₯νλ€.
rocketImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
rocketAnimation.start();
}
});
}
rocketAnimation.start()
μ νλ©΄ μ λλ©μ΄μ
μ΄ μ€νμ΄ λ©λλ€.
μ£Όμμ¬ν
-
start()
λ©μλλonCreate()
μμλ μ€νμ΄ λΆκ°λ₯νκΈ° λλ¬Έμ μ²μλΆν° μ λλ©μ΄μ μ΄ μ€νλλ κ²μ μνλ€λ©΄onWindowFocusChanged()
λ©μλλ₯Ό μ€λ²λΌμ΄λ©ν΄μ μ€νν΄μ£Όλ κ²μ΄ κ°λ₯νλ€.β
μΌλ°μ μΈ λ¬Όλ¦¬ κΈ°λ° μ λλ©μ΄μ μ λ€μκ³Ό κ°λ€.
-
Spring animation
-
Lifecycle of a spring animation(μ€νλ§ μ λλ©μ΄μ μλͺ μ£ΌκΈ°)
- μ€νλ§ κΈ°λ° μ λλ©μ΄μ μμ SpringForce ν΄λμ€λ₯Ό μ¬μ©νλ©΄ μ€νλ§μ κ°μ±, κ°μ λΉμ¨ λ° μ΅μ’ μμΉλ₯Ό μ¬μ©μ μ μ ν μ μμ
- μ λλ©μ΄μ μ΄ μμ λ μλ§μ μ€νλ§ λ ₯μ κ° νλ μμ μ λλ©μ΄μ κ°κ³Ό μλλ₯Ό μ λ°μ΄νΈν©λλ€.
- μ λλ©μ΄μ μ μ€νλ§ λ ₯μ΄ ννμ λλ¬ ν λκΉμ§ κ³μλ©λλ€.
- μλ₯Ό λ€μ΄ νλ©΄μμ μ± μμ΄μ½μ λλκ·Έ ν λ€μ μμ΄μ½μμ μκ°λ½μ λΌμ΄ λμΌλ©΄ λμ€μ 보μ΄μ§ μμ§λ§ μ΅μν λ°©μμΌλ‘ μλ μμΉλ‘ λμκ°λλ€.
-
Build a spring animation(μ€νλ§ μ λλ©μ΄μ λ§λ€κΈ°)
-
μ€νλ§ μ λλ©μ΄μ ν΄λμ€λ₯Ό μ¬μ©νλ €λ©΄ νλ‘μ νΈμ μ§μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μΆκ°ν΄μΌν©λλ€.
dependencies { implementation 'com.android.support:support-dynamic-animation:27.1.1' }
β
-
κΈ°λ³Έ λ¨κ³λ SpringAnimation ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό λ§λ€κ³ λͺ¨μ λμ λ§€κ° λ³μλ₯Ό μ€μ νλ€
final View img = findViewById(R.id.imageView); // λ·°μ translationY μμ±μ μ λλ©μ΄μ μ μ μ©νλ μ€νλ§ μ λλ©μ΄μ μ€μ // 0μμ μ€νλ§ μμΉ final SpringAnimation springAnim = new SpringAnimation(img, DynamicAnimation.TRANSLATION_Y, 0);
μ€νλ§ κΈ°λ° μ λλ©μ΄μ μ λ·° κ°μ²΄μ μ€μ μμ±μ λ³κ²½νμ¬ νλ©΄μμ λ·°μ μ λλ©μ΄μ μ λ§λ€ μ μμ΅λλ€. μμ€ν μμ λ€μ보기λ₯Ό μ¬μ©ν μ μμ΅λλ€.
TRANSLATION_X
,TRANSLATION_Y
: μ΄ μμ±μ λ μ΄μμ 컨ν μ΄λμμ μ€μ ν μΌμͺ½ μ’ν, μμͺ½ μ’ν λ° κ³ λμμ λΈνλ‘ λ·°κ°μλ μμΉλ₯Ό μ μ΄ν©λλ€.
-
Demping ratio(κ°μ λΉμ¨)
κ°μ λΉμ¨μ μ¬μ©νμ¬ μ§λμ΄ ν λ°μ΄μ€μμ λ€μ λ°μ΄μ€λ‘ μΌλ§λ 빨리 κ°μνλμ§ μ μ ν μ μμ΅λλ€
- getSpring () λ©μλλ₯Ό νΈμΆνμ¬ κ°μ λΉμ¨μ μΆκ° ν μ€νλ§μ κ²μνλ€
- setDampingRatio () λ©μλλ₯Ό νΈμΆνκ³ μ€νλ§μ μΆκ° ν κ°μ λΉμ¨μ μ λ¬νλ€. λ©μλλ κ°μ λΉμ¨μ΄ μ€μ λ μ€νλ§ λ ₯ κ°μ²΄λ₯Ό λ°νν©λλ€.
- 1.
DAMPING_RATIO_HIGH_BOUNCY
- 2.
DAMPING_RATIO_MEDIUM_BOUNCY
- 3.
DAMPING_RATIO_LOW_BOUNCY
- 4.
DAMPING_RATIO_NO_BOUNCY
- 1.
-
-
κΈ°λ³Έ κ°μ λΉμ¨μ DAMPING_RATIO_MEDIUM_BOUNCY
μ€μ λ©λλ€.
final View img = findViewById(R.id.imageView);
final SpringAnimation anim = new SpringAnimation(img, DynamicAnimation.TRANSLATION_Y);
β¦
//Setting the damping ratio to create a low bouncing effect.
anim.getSpring().setDampingRatio(DAMPING_RATIO_MEDIUM_BOUNCY);
λ€μ΄κΈ°κΈ° μ μ...
μλλ‘λ μ± κ°λ° μ ν λ²μ―€ κ²ͺμ΄ λ³Έ μ΄λ €μ μ€ νλλ μλλ‘μ΄λ μ»΄ν¬λνΈμ μλͺ μ£ΌκΈ°κ° μλκΉ μΆλ€. νΉν λ°νμμ νλ©΄ λ°©ν₯μ΄ μ νλκ±°λ μΈμ΄, κΈκΌ΄ λ°°μ¨κ³Ό κ°μ κΈ°κΈ° ꡬμ μ΄ λ³κ²½λλ κ²½μ°λ₯Ό λ€λ£¨λ €λ©΄ μΈμ¬ν μ²λ¦¬κ° νμνλ€.
μ΄λ¬ν λ³κ²½μ΄ μΌμ΄λλ κ²½μ°, μλλ‘μ΄λλ μ€ν μ€μΈ μ‘ν°λΉν°λ₯Ό μ’ λ£νκ³ , λ©λͺ¨λ¦¬μμ μ κ±° ν λ€μ μμ±νκΈ° λλ¬Έμ μ΄ κ³Όμ μμ μ‘ν°λΉν°μ μ’ μλ UIλ°μ΄ν°λ₯Ό μ μ§νλ κ²μ μμ΄ λ§μ΄ κ°λ μ‘μ μ΄λ€.
μλ‘μ΄ μν€ν μ² κ΅¬μ± μμ μ€ κ°μ₯ μ€μν ν΄λμ€ μ€ νλμΈ viewModelμ UIμ κ΄λ ¨λ λ°μ΄ν°λ₯Ό 보μ νκ³ νλ©΄ νμ κ³Ό κ°μ κ΅¬μ± λ³κ²½ μ€μ 무결μ±μ μ μ§νλλ‘ μ€κ³λμ΄ μλ€. viewModelμ Repositoryμ λννκ³ , LiveDataλ₯Ό κ°μ Έμ λ·°μμ λ³Ό μ μλλ‘ νλ€. κ΅¬μ± λ³κ²½ ν Repositoryλ₯Ό μλ‘ νΈμΆν νμκ° μμΌλ―λ‘ μ½λκ° λ§μ΄ μ΅μ νλμλ€
μΌλ°μ μΌλ‘ μμ€ν μ΄ μ²μμΌλ‘ νλ κ°μ²΄μ onCreate () λ©μλλ₯Ό νΈμΆ ν λ ViewModelμ μμ²νλ€. μμ€ν μ ν΄λν° νλ©΄μ νμ ν λμ κ°μ΄ νλμ΄ λλ λκΉμ§ μ¬λ¬ λ² onCreate ()λ₯Ό νΈμΆ ν μ μμ΅λλ€. ViewModelμ μ‘ν°λΉν°κ° λλκ³ μλ©Έ λ λκΉμ§ ViewModelμ μ²μ μμ²νμ λλΆν° μ‘΄μ¬νλ€.