ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

如何在Android Studio中运行JavaFX并制作ImageView

2019-08-23 12:59:55  阅读:841  来源: 互联网

标签:android java javafx android-studio javafxports


我有一个javafx.scene.image.Image类的接口.我必须实现它并创建ImageView.那么,如何将JavaFx添加到我的Adnroid Studio项目中以及如何在我的活动中执行ImageView或其他Image元素?

User.java

import javafx.scene.image.Image;

    public interface User
    {
        String getName();
        int getId();
        Image getIcon();
    }

解决方法:

基于JavaFXPorts和Kokos sample,您可以将JavaFX添加到使用Android Studio创建的Android项目中,并且您将能够在Android片段内运行JavaFX场景.

请注意,JavaFXPorts最初旨在使用普通Java在Android和iOS上运行完整的JavaFX项目,而不使用本机代码.反过来做是可能的,但这不是最好的方法.

无论如何,这些是使用JavaFX ImageView创建JavaFX场景以保存JavaFX图像所需的步骤.

1.在Android Studio上创建一个简单的项目

选择“基本活动”模板,然后选择片段的使用.

Add a fragment

2.修改构建gradle文件

build.gradle(顶级项目)

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'me.tatarka:gradle-retrolambda:3.5.0'
        classpath 'com.android.tools.build:gradle:2.2.3'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle(module:app)

在这个文件中,我们将包括dalvik-sdk,Android的JavaFXPorts依赖项.如果您使用Java IDE的Gluon插件使用jfxmobile插件创建移动项目,您可以在以下位置找到它:

~/.gradle/caches/modules-2/files-2.1/org.javafxports/dalvik-sdk/8.60.10/e...a/unpacked/dalvik-sdk

否则,它可以从here下载.将它解压缩到给定的路径,比方说$dalvikPath.

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.3"
    defaultConfig {
        applicationId "gluonhq.com.myfragment"
        minSdkVersion 25
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    dexOptions {
        preDexLibraries = false
        additionalParameters=['--core-library']
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets {
        main {
            jniLibs.srcDir file("$dalvikPath/rt/lib")
            assets.srcDirs = ['assets']
        }
    }
    lintOptions {
        abortOnError false
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile fileTree(include: ['*.jar'], dir: '$dalvikPath/rt/lib/ext')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
    compile 'com.android.support:design:26.0.0-alpha1'
    testCompile 'junit:junit:4.12'
}

3.创建一个扩展FXFragment的类

在MainActivity.java中:

public static class PlaceholderFragment extends FXFragment {

    public PlaceholderFragment() {
        String fxapp = "your.package.myfragment.MainFX";
        this.setName(fxapp);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

并从onCreate调用它:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (savedInstanceState == null) {
        getFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment())
                .commit();
    }
    ...
}

请注意,activity_main.xml中需要android:id =“@ id / container”.

4.最后一步:创建JavaFX类

确保包名称是your.package.myfragment.

MainFX.java

public class MainFX extends Application {

    @Override
    public void start(Stage stage) throws Exception {

        final ImageView imageView = new ImageView();
        imageView.setImage(new Image("https://upload.wikimedia.org/wikipedia/en/c/cc/JavaFX_Logo.png"));
        imageView.setPreserveRatio(true);

        Screen primaryScreen = Screen.getPrimary();
        Rectangle2D visualBounds = primaryScreen.getVisualBounds();
        double width = visualBounds.getWidth();
        double height = visualBounds.getHeight();

        StackPane stackPane = new StackPane(imageView);
        Scene scene = new Scene(stackPane, width, height);

        imageView.fitWidthProperty().bind(scene.widthProperty().subtract(20));
        stage.setScene(scene);
        stage.show();
    }

}

请注意,这是一个纯JavaFX Application类,您需要根据屏幕边界设置舞台大小.

部署并运行应用程序

请注意,您将在Android视图中运行JavaFX,但根据您的布局,您仍然可以在其上的不同视图上安装其他Android组件.

标签:android,java,javafx,android-studio,javafxports
来源: https://codeday.me/bug/20190823/1697607.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有