我试图从两点画一条简单的线,但是它行不通,按照网络上的先前示例看起来很简单。我用画线代码创建了一个新项目和简单活动。
任何人都可以告知代码有什么问题吗
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>
答案 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
)。