Я работаю в Java в Android Studio. Я хочу сделать GUI с парой рядов кнопок внизу экрана и графическим холстом на оставшейся части экрана. Ниже приведен самый близкий мне пример создания GUI. Но обратите внимание, что графика может легко перекрываться с кнопками в зависимости от размера растрового изображения, а это не то, что я хочу. Размер растрового изображения должен быть таким, чтобы он занимал всю графическую область, а графическая область не должна перекрываться кнопками. Может кто-нибудь сказать мне, как я должен это сделать?
Спасибо за любую помощь!
activitymain. xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/relativeLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ActivitymainActivity">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="vertical">
<LinearLayout
android:id="@+id/BtnTopl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center">
<Button
android:id="@+id/line1OnCtrl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="Line1 On" />
<Button
android:id="@+id/line1OffCtrl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="Line1 Off" />
</LinearLayout>
<LinearLayout
android:id="@+id/BtnTop2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
app:layout_constraintBottom_toBottomOf="parent">
<Button
android:id="@+id/line2OnCtrl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="Line2 On" />
<Button
android:id="@+id/line2OffCtrl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="Line2 Off" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
ActivitymainActivity. java
package tmw.fctestversion1;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.graphics.Canvas;
import android.graphics.Bitmap;
// import tmw.fctestversion1.R;
public class ActivitymainActivity extends AppCompatActivity {
Context context;
Resources resources;
RelativeLayout relativeLayout;
Button line1OnCtrl, line1OffCtrl, line2OnCtrl, line2OffCtrl;
ImageView imageView;
boolean DisplayLine1 = false;
boolean DisplayLine2 = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activitymain);
context = getApplicationContext();
resources = getResources();
relativeLayout = findViewById(R.id.relativeLayout);
line1OnCtrl = findViewById(R.id.line1OnCtrl);
line1OffCtrl = findViewById(R.id.line1OffCtrl);
line2OnCtrl = findViewById(R.id.line2OnCtrl);
line2OffCtrl = findViewById(R.id.line2OffCtrl);
imageView = findViewById(R.id.imageView);
line1OnCtrl.setOnClickListener(this::clickLine1OnCtrl);
line1OffCtrl.setOnClickListener(this::clickLine1OffCtrl);
line2OnCtrl.setOnClickListener(this::clickLine2OnCtrl);
line2OffCtrl.setOnClickListener(this::clickLine2OffCtrl);
drawAll(imageView);
}
public void clickLine1OnCtrl(View view) {
DisplayLine1 = true;
drawAll(view);
}
public void clickLine1OffCtrl(View view) {
DisplayLine1 = false;
drawAll(view);
}
public void clickLine2OnCtrl(View view) {
DisplayLine2 = true;
drawAll(view);
}
public void clickLine2OffCtrl(View view) {
DisplayLine2 = false;
drawAll(view);
}
public void drawAll(View view) {
int width = imageView.getWidth();
int height = imageView.getHeight(); // This attempt to fill the imageView with the bitmap
// caused a core dump.
Bitmap bitmap = Bitmap.createBitmap(1050, 1050, Bitmap.Config.ARGB_8888);
// Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.BLACK); // This sets the background color of the canvas.
Paint paint = new Paint();
paint.setColor(Color.RED); // This sets the foreground color.
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(8);
paint.setAntiAlias(true);
int offset = 50;
if (DisplayLine1)
canvas.drawLine(0, 0, canvas.getWidth(), canvas.getHeight(), paint);
if (DisplayLine2)
canvas.drawLine(100, 0, canvas.getWidth(), canvas.getHeight(), paint);
imageView.setImageBitmap(bitmap);
}
}