Создание графика c с кнопками управления в Java в Android Studio - PullRequest
0 голосов
/ 22 марта 2020

Я работаю в 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);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...