在Java專案中手動導入Kotlin開發的三方庫

Android Nov 24, 2020

最近有個需求,大致上就是想要在App中做一個搖桿控鍵,在思索一下後,直接在我比較熟悉的iOS專案中自己刻了起來,恩...不用一個上午就完成了。

等等,還有Android呀!!!因為這個專案目前還是依賴原生較多,也沒有計畫以Flutter來重寫,所以要各自開發。

在瀏覽器搜索一番後,我發現了一個感覺還滿簡潔的源碼:

CircleDPad

該作者是以 Kotlin開發的,不過我在透過build.gradle導入過程中並不順利,況且我需要增加其功能,所幸就來手動導入吧!

將專案拉下來
拷貝進自己專案
include ':circledpad'  
implementation project(':circledpad')  
ext.kotlin_version = "1.3.72"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
手動導入完成

接下來要在專案中使用它

    <io.github.kaczmarek.circledpad.CircleDPad
        android:id="@+id/cdp"
        android:layout_width="300dp"
        android:layout_height="300dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
import androidx.appcompat.app.AppCompatActivity;
import io.github.kaczmarek.circledpad.CircleDPad;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements CircleDPad.OnClickCircleDPadListener {

    private CircleDPad mDPadButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mDPadButton = findViewById(R.id.cdp);
        mDPadButton.setListener(this);
    }

    @Override
    public void onClickButton(int button) {
        switch (button) {
            case CircleDPad.TOP_BUTTON:
                Toast.makeText(getApplicationContext(),"TOP_BUTTON_Click",Toast.LENGTH_SHORT).show();
                break;
            case CircleDPad.BOTTOM_BUTTON:
                Toast.makeText(getApplicationContext(),"BOTTOM_BUTTON_Click",Toast.LENGTH_SHORT).show();
                break;
            case CircleDPad.LEFT_BUTTON:
                Toast.makeText(getApplicationContext(),"LEFT_BUTTON_Click",Toast.LENGTH_SHORT).show();
                break;
            case CircleDPad.RIGHT_BUTTON:
                Toast.makeText(getApplicationContext(),"RIGHT_BUTTON_Click",Toast.LENGTH_SHORT).show();
                break;
            case CircleDPad.CENTER_BUTTON:
                Toast.makeText(getApplicationContext(),"CENTER_BUTTON_Click",Toast.LENGTH_SHORT).show();
                break;
        }
    }
}

至此,已完成使用。

套件的源碼
    interface OnClickCircleDPadListener {
        fun onClickButton(@DPadButton button: Int)
        fun OnReleaseButton(@DPadButton button: Int)  //可以由這自己加開介面
    }
else if (event.action == MotionEvent.ACTION_UP) {
            pressedState.forEachIndexed { index, b ->
                if (b) {
//                    listener?.onClickButton(index)
                    listener?.OnReleaseButton(index) //在自己邏輯需要的地方通知出去
                }
            }
            updatePressedState()
        }

整個過程不至於很複雜,不過相信對剛接觸的人會有幫助~

Tags