Avatar
0
Cường Ngô Beginner
Cường Ngô Beginner
Tạo mũi tên giữa hai views
Giúp em cái này với ạ, e muốn vẽ mũi tên nẵm chính giữa 2 views, nhưng mà nó cứ bị lệch, code của e đây ạ.
       
val mImageView = findViewById<ImageView>(R.id.image_view_1)
val mButton = findViewById<Button>(R.id.button_1)
val tv1 = findViewById<View>(R.id.textView)
val tv2 = findViewById<View>(R.id.textView2)
val currentDisplay = windowManager.currentWindowMetrics
val dw = currentDisplay.bounds.width()
val dh = currentDisplay.bounds.height()
val mBitmap = Bitmap.createBitmap(dw, dh, Bitmap.Config.ARGB_8888)
val mCanvas = Canvas(mBitmap)
mImageView.setImageBitmap(mBitmap)
mButton.setOnClickListener {
    val mPaint = Paint()
    mPaint.color = Color.GREEN
    mPaint.style = Paint.Style.STROKE
    mPaint.strokeWidth = 10F
    mPaint.isAntiAlias = true
    val mStartX = tv1.bottom.toFloat()
    val mStartY = tv1.left.toFloat()
    val mStopX = tv2.top.toFloat()
    val mStopY = tv2.right.toFloat()
    mCanvas.drawLine(mStartX, mStartY, mStopX, mStopY, mPaint)
    mImageView.setImageBitmap(mBitmap)
}
e muốn kết quả như vầy ạ. s.png

còn đây là hình code chạy

z4765858565121_90a7d7791567c04d5e6334f2ef6f8d54.jpg
  • Answer
Remain: 5
1 Answer
Avatar
PhuongPyke Beginner
PhuongPyke Beginner
https://drive.google.com/file/d/1CWmHIKBplavr4YMLUMyQGMlSUvza2ALW/view?usp=sharing

Bạn tải source về tham khảo nhé

  • 2
  • Reply
ok, để mình thử, cảm ơn bạn  –  Cường Ngô 1696905679000
mình làm được rồi, cảm ơn bạn, nhưng co mình hỏi cái này được không, mình muốn khi vào main activity là nó chạy luôn khỏi cần click vào nút button thì làm sao ạ, mình đưa code ra ngoài thì nó lại không đúng.  –  Cường Ngô 1696906983000
  1. Sử dụng setOnClickListener: Khi bạn đặt mã vẽ mũi tên trong một setOnClickListener, mã đó chỉ được thực thi khi người dùng nhấn vào nút. Điều này đảm bảo rằng mã chỉ chạy khi bạn thực sự muốn vẽ mũi tên, sau khi bạn đã thực hiện một hành động cụ thể (như nhấn nút).
  2. Đặt mã trực tiếp trong onCreate: Khi bạn đặt mã vẽ mũi tên trong onCreate của Activity, mã đó sẽ được thực thi ngay khi Activity được tạo ra. Điều này có nghĩa là nó sẽ chạy ngay sau khi ứng dụng của bạn được khởi động, trước khi bạn có thể thấy giao diện hoặc thậm chí trước khi nó được hiển thị. Điều này có thể dẫn đến trường hợp mũi tên vẽ khi mà giao diện chưa hiển thị hoặc chưa được tạo.

Đây là nguyên nhân khiến bạn bỏ nó ra ngoài mà nó không hiển thị

Giải pháp như sau :

Bạn cần tách phần tạo mũi tên ra khỏi : onCreate sau đó với vẽ mũi tên sau.

Source code tham khảo : https://drive.google.com/file/d/1yxbGjzwH-m8J6MiKMGgoKfx7i0E7xYA_/view?usp=sharing

 –  PhuongPyke 1696908911000
cảm ơn bro, mình làm được rồi. cảm ơn nhiềuuuuuuuuuuuuuuuuuuuu  –  Cường Ngô 1696911316000