Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android Studio中运行JavaFX并生成ImageView_Java_Android_Android Studio_Javafx_Javafxports - Fatal编程技术网

如何在Android Studio中运行JavaFX并生成ImageView

如何在Android Studio中运行JavaFX并生成ImageView,java,android,android-studio,javafx,javafxports,Java,Android,Android Studio,Javafx,Javafxports,我有一个与javafx.scene.image.image类的接口。我必须实现这一点并创建ImageView。那么,如何将JavaFx添加到我的Android Studio项目中,以及如何在我的活动中执行ImageView或其他图像元素 User.java import javafx.scene.image.Image; public interface User { String getName(); int getId();

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

User.java

import javafx.scene.image.Image;

    public interface User
    {
        String getName();
        int getId();
        Image getIcon();
    }
基于和Kokos,您可以将JavaFX添加到使用androidstudio创建的Android项目中,并且您将能够在Android片段中运行JavaFX场景

请注意,JavaFXPorts最初旨在使用纯Java在Android和iOS上运行完整的JavaFX项目,而不使用本机代码。用另一种方法做是可能的,但这不是最好的方法

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

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

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

2。修改生成梯度文件

build.gradle(顶级项目)

build.gradle(模块:应用程序)

在这个文件中,我们将包括
dalviksdk
,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
否则,可以从下载。将其提取到给定路径,比如说
$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\u main.xml
中需要
android:id=“@+id/container”

4。最后一步:创建JavaFX类

确保包名为
your.package.myfragment

MainFX.java

请注意,这是一个纯JavaFX应用程序类,需要根据屏幕边界设置阶段大小

部署并运行应用程序


请注意,您将在Android视图中运行JavaFX,但根据您的布局,在不同视图上仍有其他Android组件。

@fabian是的,您可以。。。查看Kokos项目。@fabian我可以将javafx.scene.image.image转换为ImageView吗?@JoséPereda cool,但是我可以将javafx.scene.image转换为ImageView吗。在您刚刚发送的示例中,没有关于ImageViews的信息。在该示例中,您可以看到如何将JavaFX节点添加到Android片段中。通过
ImageView
,您是指Android的ImageView吗?请注意,JavaFX图像必须显示在JavaFX
ImageView
节点中。@JoséPereda Yep,Android的ImageView。我理解这个密码。但是我怎样才能将javaFX添加到我的项目中呢?我添加了org.javafxports:jfxmobile-plugin:dependency,但是User.class仍然看不到javaFX
@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();
    }
    ...
}
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();
    }

}