Android Studio Kotlin Функция Drawline - PullRequest
0 голосов
/ 13 апреля 2019

Я пытаюсь нарисовать простую линию из двух точек, но она не работает и выглядит так просто, следуя предыдущим примерам в Интернете. Я создал новый проект и простое занятие с кодом drawline.

Может кто-нибудь посоветовать, в чем проблема с кодом:

activity_main_screen.kt

package com.example.sandpit11
import android.content.Context
import android.graphics.Canvas
import android.graphics.Paint
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.Color
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.util.AttributeSet
import android.view.View
import kotlinx.android.synthetic.main.activity_main_screen.*


 class MainScreen : AppCompatActivity() {


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    setContentView(R.layout.activity_main_screen)

    // --------------------------------------
    SettingImageButton.setOnClickListener {
        val intent = Intent(this, SettingActivity::class.java)

        startActivity(intent)
    }

    val bitmap = Bitmap.createBitmap(700, 1000, Bitmap.Config.ARGB_4444)
    val canvas = Canvas(bitmap)

    // Initialise a new Paint instance to draw the line
    val paint = Paint()
    paint.color = Color.WHITE
    canvas.drawLine(10f, 100f, 4000f, 400f, paint)

    // Line
    val paint2 = Paint()
    paint2.color = Color.GREEN
    paint2.strokeWidth = 10f
    val startx = 50f
    val starty = 100f
    val endx = 150f
    val endy = 210f
    canvas.drawLine(startx, starty, endx, endy, paint2)



}
}

activity_main_screen.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainScreen"
    android:background="@android:color/black">

<ImageButton
        android:layout_width="86dp"
        android:layout_height="69dp"
        app:srcCompat="@drawable/settingicon"
        android:id="@+id/SettingImageButton"
        app:layout_constraintStart_toStartOf="parent"
        android:layout_marginLeft="8dp"
        android:layout_marginStart="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        app:layout_constraintHorizontal_bias="0.987"
        android:layout_marginTop="16dp"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintVertical_bias="0.0"/>

 </android.support.constraint.ConstraintLayout>

1 Ответ

0 голосов
/ 13 апреля 2019

Можете ли вы уточнить, что вы пытаетесь достичь здесь? Вы пытаетесь нарисовать линию на самом действии или каком-либо другом виде?

Как сказал Майк М., вы только создаете растровое изображение и холст и выполняете с ними операции. На самом деле вы не используете растровое изображение или холст для правильного рисования.

Я собираюсь ответить, предполагая, что вы пытаетесь нарисовать линию на представлении, которое находится внутри действия. Таким образом, вам понадобится класс, который расширяет класс View (это может быть либо внутренний класс вашей деятельности, либо отдельный файл). В этом классе вам нужно переопределить метод onDraw(Canvas) и выполнить операции с параметром Canvas. Вы по-прежнему сможете рисовать растровые изображения с помощью функции Canvas drawBitmap() (см. Документы по Android Canvas ). Ниже я приведу небольшой пример кода (он будет на языке Java, но его легко будет перевести на Kotlin).

class MyView extends View {
    public MyView(Context context){
        super(context);
        // other initialization stuff
    }

    @Override
    protected void onDraw(Canvas canvas){
        super.onDraw(canvas);
        canvas.drawLine(...);
        canvas.drawBitmap(...);
        ...
        // your other code
        ...
    }
}

Если у вас есть этот класс представления, вы сможете вручную его раздувать в XML-файле макета задания или программно раздувать его, если это лучше подходит для вашего варианта использования. Пример сохранения его в вашем xml приведен ниже.

<your.package.name.MyView
        android:id="@+id/my_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        ...
        other properties
        ... />

Кажется, у вас есть ImageButton в вашем xml и коде. Если этот элемент представления является тем, что вы пытаетесь нарисовать, вы можете более или менее сделать то же самое. Вам просто нужно расширить ImageButton вместо View (так как ImageButton is-a View).

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