您的位置:首页 > 移动开发 > Android开发

[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,效果更明显。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android Kotlin Anko