[Kotlin&Anko开发Android入门学习笔记]-02Kotlin如何使用Android第三方库
2017-02-19 23:44
911 查看
一、背景说明
我们想将我们之前的项目,使用Kotlin重构,那么,在原来项目,会有一些第三方库(或者自己封装的自定义控件),我们总不能将人家的库也给重新用Kotlin重写吧。由于Kotlin支持Java代码,所以,主要思路是,使用Anko将我们要用到的库扩展,然后,需要用到的库中的方法属性,根据库文档进行适当的Kotlin调用。我将使用Fresco的SimpleDraweeView这个控件进行简单的举例。
二、配置SimpleDraweeView
关于Fresco,可以参考最新的文档进行相应的配置。首先配置app/build.gradle:compile 'com.facebook.fresco:fresco:0.8.1+'
然后在AndroidMainfest中配置网络权限:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="top.xiexiaodong.hellokotlin">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
这样我们就可以使用SimpleDraweeView控件了。
三、添加SimpleDraweeView的Anko扩展
这里我们添加到MainActivity.kt中:import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.ViewManager
import com.facebook.drawee.view.SimpleDraweeView
import org.jetbrains.anko.*
import org.jetbrains.anko.custom.ankoView
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
MainActivityUi().setContentView(this)
}
}
class MainActivityUi : AnkoComponent<MainActivity> {
override fun createView(ui: AnkoContext<MainActivity>) = with(ui) {
verticalLayout {
textView("Hello Kotlin!")
button("Click me") {
onClick {
toast("Oh, You clicked me!")
}
}
}
}
}
public inline fun ViewManager.simpleDraweeView(theme: Int = 0) = simpleDraweeView(theme) {}
public inline fun ViewManager.simpleDraweeView(theme: Int = 0, init: SimpleDraweeView.() -> Unit) = ankoView({ SimpleDraweeView(it) }, init)
我们在View中使用SimpleDraweeView,则使用内置函数ViewManager.新控件名称添加扩展,相应的,我们可以将Activity和Context都添加上去,代码如下:
public inline fun Activity.simpleDraweeView(theme: Int = 0) = simpleDraweeView(theme) {}
public inline fun Activity.simpleDraweeView(theme: Int = 0, init: SimpleDraweeView.() -> Unit) = ankoView({ SimpleDraweeView(it) }, init)
public inline fun Context.simpleDraweeView(theme: Int = 0) = simpleDraweeView(theme) {}
public inline fun Context.simpleDraweeView(theme: Int = 0, init: SimpleDraweeView.() -> Unit) = ankoView({ SimpleDraweeView(it) }, init)
这样,我们就可以在布局中使用SimpleDraweeView了:
class MainActivityUi : AnkoComponent<MainActivity> {
override fun createView(ui: AnkoContext<MainActivity>) = with(ui) {
verticalLayout {
textView("Hello Kotlin!")
button("Click me") {
onClick {
toast("Oh, You clicked me!")
}
}
simpleDraweeView().lparams(width = matchParent, height = matchParent) {
}.apply {
setImageURI(Uri.parse("http://avatar.csdn.net/7/2/A/3_a191030148.jpg"), null)
hierarchy.setFadeDuration(300)
hierarchy.setActualImageScaleType(ScalingUtils.ScaleType.FIT_XY)
}
}
}
}
最后,我们还要在使用SimpleDraweeView之前,初始化Fresco,这里放在了MainActivity onCreate()方法中了:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Fresco.initialize(this)
MainActivityUi().setContentView(this)
}
}
其中,hierarchy.setFadeDuration()诸如此类的第三方库才会提供的属性设置,我是通过Fresco官方文档,参考Java代码来调用的,使用方法和Java差不多,在这里提供一下参考。我们运行一下程序看看效果:
有淡入效果,可以修改为3000,效果更明显。
相关文章推荐
- [Kotlin&Anko开发Android入门学习笔记]-01使用Kotlin创建Activity活动
- Android知识体系梳理笔记五:Kotlin学习笔记一:类和继承以及Anko(全)的基本使用
- android 开发零起步学习笔记(二十):Android开发笔记:如何使用预先制作好的SQLite数据库(整理自网络)
- 使用Kotlin&Anko, 扔掉XML开发Android应用
- android开发学习(四)——anr产生的原理&如何避免,android消息机制入门, 网络图片查看器
- Android开发入门学习笔记之三
- <Android入门笔记>第一章 搭建Android开发环境
- 1.Android新版开发教程&笔记—Android ADB工具使用
- Android开发学习笔记-8 SQLite使用
- Android开发入门之学习笔记(二)
- Android应用开发学习笔记之使用Bundle交换数据
- Android开发入门之学习笔记(四):程序窗口的布局(二)
- 【学习笔记】【Cocos2d-x Lua脚本开发】如何使用Lua脚本调用自定义类
- Android入门学习笔记(二):Android开发环境的搭建
- android开发学习如何一体化?从入门到高端开发的路如何走?
- Android 学习笔记5---程序开发模式&拨号器&短信发送器小例程
- android ->在界面上使用URI编程 ----开发笔记1
- 线程、消息-Android入门开发系列学习之 Handler使用-by小雨
- android 入门学习笔记 LayoutInflater的使用
- [hsp学习笔记]如何使用myEclipse进行hibernate开发(第十二讲)