Android Studio Kotlin画线功能

时间:2019-04-13 19:30:08

标签: android kotlin

我试图从两点画一条简单的线,但是它行不通,按照网络上的先前示例看起来很简单。我用画线代码创建了一个新项目和简单活动。

任何人都可以告知代码有什么问题吗

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 :(得分:0)

您能在这里详细说明您要完成的工作吗?您是要在活动本身还是其他视图上画线?

正如Mike M.所说,您仅创建一个Bitmap和Canvas并对其进行操作。您实际上并没有使用位图或画布进行任何适当的绘制。

我要回答的假设是您试图在活动内部的视图上画一条线。这样,您将需要一个扩展View类的类(可以是您活动的内部类,也可以是单独的文件)。在此类中,您将需要覆盖onDraw(Canvas)方法并对Canvas参数进行操作。您仍然可以通过Canvas drawBitmap()函数绘制位图(请参见Android Canvas docs)。我将在下面提供一个简短的示例代码段(它将用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
        ... />

似乎您的xml和代码中有一个ImageButton。如果要尝试使用此view元素,则可以或多或少地执行相同的操作。您只需要扩展ImageButton而不是View(因为ImageButton是-View)。