สรุปภาพรวมเรื่อง Custom View บน Android App หลายๆแบบ

Custom View แบบแก้ไข View ตัวเดียว

Custom จาก Properties เดิมที่มีอยู่แล้ว (อยู่ด้านล่าง)
CustomView แบบ extends widgets class ที่มีอยู่แล้วเช่น Button , TextView ()
CustomView แบบ extends View Class (อยู่ด้านล่าง)

Custom View แบบรวมหลายๆ View ให้เป็นตัวเดียวกัน

- CustomView ขึ้นมาใหม่โดย extends LinearLayout (อยู่ด้านล่าง)
- Custom Adapter ของ ListView
- Custom Adapter ของ GridView
- Custom Adapter ของ Recycler View : https://trymydroid.blogspot.com/2019/07/android-kotlin-json-parsing-using.html

(Advance)
ลองทำ Custom Toast จากโค้ด Kotlin , Java
ลองทำ Custom Dialog จากโค้ด Kotlin , Java

_________________________________________________
Custom จาก Properties เดิมที่มีอยู่แล้ว

Example การเปลี่ยน Icon ของ SeekBar

<SeekBar
            android:id="@+id/simpleSeekBar"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:max="200"
            android:progress="10"
            android:theme="@style/SeekBarColor"
            android:thumb="@drawable/ic_action_music_1"/>

ตรง drawble นอกจาก icon หรือรูปภาพ เราสามารถสร้างรูปทรงขึ้นมาใส่เองได้ (Drawable Resource)




Custom View ขึ้นมาใหม่โดย extends LinearLayout

- สร้างหน้าตาของ View เช่น BackButton - ImageView - NextButton ( ใน custom_image_slide.xml )

- สร้าง Class ชื่อ CustomImageSlide ที่ extends LinearLayout (Other : FrameLayout , RelativeLayout)
  เพื่อ inflate : custom_image_slide.xml เข้ามา
  เพื่อควบคุมว่ากดปุ่ม Next , Back ให้เปลี่ยนภาพไปมาได้

- นำ CustomImageSlide ไปใช้งานใน layout ของ activity ที่ต้องการ

เช่น
<com.example.trymydroid.CustomImageSlide
        android:id="@+id/imageSlide"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

ไอเดียร์นี้มาจาก บล็อคพี่สะมะเกรียด
อ่านเต็มๆได้ที่ : http://www.akexorcist.com/2016/12/introduction-to-custom-view-part-2.html

หรืออยากเอาพอเป็นกระไส เรียกน้ำย่อยก่อนได้ที่
http://trymydroid.blogspot.com/2019/10/custom-view-layout-xml-2-textview-1.html





CustomView แบบ extends View Class

ตัวอย่างนี้ค่อนข้าง Advance เพราะจะเป็นการสร้าง View ขึ้นมาใหม่ใน onDraw
และ Advance ขึ้นไปอีกคือการทำ Touch Listener ให้ View ตัวนี้ (ไม่มีในบทความนี้)

Example :

class TestCustomViewDraw1(context: Context, attrs: AttributeSet) : View(context, attrs){

    @SuppressLint("DrawAllocation")
    override fun onDraw(canvas: Canvas) {
        // call the super method to keep any drawing from the parent side.
        super.onDraw(canvas)

        val paint =  Paint(Paint.ANTI_ALIAS_FLAG)
        paint.color = Color.BLACK
        paint.style = Paint.Style.STROKE
        paint.strokeWidth = 2F

        canvas.drawLine(0F, 0F ,100F ,100F, paint)  // drawLine(startX, startY, stopX, stopY)
    }
}

other :
canvas.drawCircle(....)
canvas.drawRect(....)
canvas.drawRoundRect(....)


ref :
http://nfcandroid.blogspot.com/2013/03/android-basic-custom-view.html
https://blog.mindorks.com/create-your-own-custom-view