如何在 Android Studio 中 运行 JavaFX 并制作 ImageView
How to run JavaFX in Android Studio and make ImageView
我有一个与 javafx.scene.image.Image class 的接口。我必须实现它并创建 ImageView。那么,如何将 JavaFx 添加到我的 Android Studio 项目中以及如何在我的 activity 中添加 ImageView 或其他图像元素?
User.java
import javafx.scene.image.Image;
public interface User
{
String getName();
int getId();
Image getIcon();
}
基于 JavaFXPorts and the Kokos sample,您可以将 JavaFX 添加到使用 Android Studio 创建的 Android 项目,您将能够 运行 JavaAndroid 片段中的 FX 场景。
请注意,JavaFXPorts 最初旨在 运行 Java Android 和 iOS 上的完整 JavaFX 项目,使用普通 Java ,没有本机代码。反其道而行之,但这不是最好的方法。
无论如何,这些是创建 JavaFX 场景所需的步骤,其中包含 JavaFX ImageView
以容纳 JavaFX Image
。
1.在 Android Studio
上创建一个简单的项目
Select一个基本的Activity模板,select一个片段的使用。
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(模块:app)
在这个文件中,我们将包括 dalvik-sdk
,JavaFXPorts 对 Android 的依赖。如果您使用 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
的 class
在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 class
确保包名是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 应用程序 class,您需要根据屏幕边界设置舞台大小。
部署并运行应用程序
请注意,您将在 Android 视图中拥有 JavaFX 运行ning,但在它之上的不同视图中仍有其他 Android 组件,取决于您的布局。
我有一个与 javafx.scene.image.Image class 的接口。我必须实现它并创建 ImageView。那么,如何将 JavaFx 添加到我的 Android Studio 项目中以及如何在我的 activity 中添加 ImageView 或其他图像元素?
User.java
import javafx.scene.image.Image;
public interface User
{
String getName();
int getId();
Image getIcon();
}
基于 JavaFXPorts and the Kokos sample,您可以将 JavaFX 添加到使用 Android Studio 创建的 Android 项目,您将能够 运行 JavaAndroid 片段中的 FX 场景。
请注意,JavaFXPorts 最初旨在 运行 Java Android 和 iOS 上的完整 JavaFX 项目,使用普通 Java ,没有本机代码。反其道而行之,但这不是最好的方法。
无论如何,这些是创建 JavaFX 场景所需的步骤,其中包含 JavaFX ImageView
以容纳 JavaFX Image
。
1.在 Android Studio
上创建一个简单的项目Select一个基本的Activity模板,select一个片段的使用。
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(模块:app)
在这个文件中,我们将包括 dalvik-sdk
,JavaFXPorts 对 Android 的依赖。如果您使用 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 class
确保包名是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 应用程序 class,您需要根据屏幕边界设置舞台大小。
部署并运行应用程序
请注意,您将在 Android 视图中拥有 JavaFX 运行ning,但在它之上的不同视图中仍有其他 Android 组件,取决于您的布局。