73

(안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

Embed Size (px)

Citation preview

Page 1: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 2: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 3: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 4: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 5: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 6: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

List<OnboarderPage> pages = new ArrayList<>();OnboarderPage page1 = new OnboarderPage( "Lorem ipsum", "dolor sit amet", R.drawable.planet1); OnboarderPage page2 = new OnboarderPage( "Consectetur", "adipiscing elit", R.drawable.planet2);OnboarderPage page3 = new OnboarderPage( "Proin", "hendrerit consequat", R.drawable.planet3); page1.setBackgroundColor(R.color.colorIndigo); page2.setBackgroundColor(R.color.colorTeal);page3.setBackgroundColor(R.color.colorOrange); pages.add(page1);pages.add(page2);pages.add(page3);

Page 7: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

setSkipButtonTitle("Skip");setFinishButtonTitle("Finish");// 페이지를 화면에 설정setOnboardPagesReady(pages);

Page 8: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 9: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

TapTargetView.showFor(this, TapTarget.forView(btnGlide, "Glide", "An image loading and caching library for Android"));

Page 10: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 11: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() .setDefaultFontPath("NotoSansCJK.ttc") .setFontAttrId(R.attr.fontPath) .build()); }}

Page 12: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

public class MainActivity extends AppCompatActivity { @Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); }}

Page 13: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" fontPath="MyCustomFont.ttf" />

Page 14: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" fontPath="MyCustomFont.ttf" tools:ignore="MissingPrefix" />

Page 15: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 16: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

https://api.lootbox.eu/pc/kr/kunny-31603/quick-play/allHeroes/

{

"MeleeFinalBlow": "1",

"SoloKills": "937",

"ObjectiveKills": "2,124",

"FinalBlows": "2,708",

"DamageDone": "2,142,080",

"Eliminations": “6,354",

...

}

Page 17: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

interface IOverwatch { @GET("{platform}/{region}/{tag}/{mode}/allHeroes/") Observable<Map<String, String>> getStats( @Path("platform") String platform, @Path(“region") String region, @Path("tag") String tag, @Path("mode") String mode) }

Page 18: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.lootbox.eu/") .client(new OkHttpClient()) .addCallAdapterFactory( RxJavaCallAdapterFactory.createWithScheduler(Schedulers.io())) .addConverterFactory(GsonConverterFactory.create()) .build();IOverwatch api = retrofit.create(IOverwatch.class); Observable<Map<String, String>> stats = api.getStats("pc", "kr", "kunny-31603", "quick-play");

Page 19: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 20: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

Glide.with(context).load(“http://image.url").into(imageView);

Page 21: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

Glide.with(context).load(“http://image.url”) .placeholder(R.drawable.loading_spinner)

.into(imageView);

Page 22: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

Glide.with(context).load(“http://image.url”) .placeholder(R.drawable.loading_spinner) .diskCacheStrategy(DiskCacheStrategy.NONE)

.into(imageView);

Page 24: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

Uri uri = Uri.parse(“http://image.url“);

SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);

draweeView.setImageURI(uri);

Page 25: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 26: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 27: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 28: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 29: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

btnSubmit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Do something } });

Page 30: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

// RxBinding

RxView.clicks(btnSubmit) .subscribe(new Action1<Void>() { @Override public void call(Void aVoid) { // Do something } });

Page 31: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

// Skip first 5 clicks// ?!btnSubmit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Do something } });

Page 32: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

RxView.clicks(btnSubmit) .skip(5) .subscribe(new Action1<Void>() { @Override public void call(Void aVoid) { // Do something } });

Page 33: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 34: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 35: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

public class Person { String name; String address; Person(String name, String address) { this.name = name; this.address = address; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; }}

Page 36: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

public class Person { String name; String address; Person(String name, String address) { this.name = name; this.address = address; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } Person person = (Person) o; if (!name.equals(person.name)) { return false; } return address != null ? address.equals(person.address) : person.address == null; } @Override public int hashCode() { int result = name.hashCode(); result = 31 * result + (address != null ? address.hashCode() : 0); return result; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", address='" + address + '\'' + '}'; }}

Page 37: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

data class Person(val name: String, val address: String?)

Page 38: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

// JavaString name = "kunny"; String address = null;

Page 39: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

// Java with Support Annotations@NonNullString name = "kunny"; @NullableString address = null;

Page 40: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

// Kotlinvar name: String = "kunny"var address: String? = null

Page 41: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

// Java

HashMap<String, String> map = new HashMap<>();map.put("Foo", "foo"); map.put("Bar", "bar"); map.put("Baz", "baz"); String value = map.get("Foo");

Page 42: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

// Kotlinval map = hashMapOf( "Foo" to "foo", "Bar" to "bar", "Baz" to "baz") val value = map["Foo"]

Page 43: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

public class MainActivity extends AppCompatActivity { Button btnCalligraphy; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnCalligraphy = (Button) findViewById(R.id.btn_calligraphy); btnCalligraphy.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Do something } }); }}

Page 44: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) btn_calligraphy.setOnClickListener { // Do something } } }

Page 45: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.2' // Add below classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.4' } }

Page 46: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

apply plugin: 'com.android.application'// Mandatoryapply plugin: 'kotlin-android'// For Kotlin Android Extensionsapply plugin: 'kotlin-android-extensions'android { // Add Source set sourceSets { main.java.srcDirs += 'src/main/kotlin' } } dependencies { // Add below compile 'org.jetbrains.kotlin:kotlin-stdlib:1.0.4'}

Page 47: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 49: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 50: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 51: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 52: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 53: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 54: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 60: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 61: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 62: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 63: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 65: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 66: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 67: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

class Foo {

public void foo() { ... }

}

Page 68: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드

class Foo {

public void foo() { ... }

public void bar() { ... } }

Page 70: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드
Page 73: (안드로이드 개발자를 위한) 오픈소스 라이브러리 사용 가이드