Skip to content

Instantly share code, notes, and snippets.

View Dev-Husnain's full-sized avatar

Hussnain Mehdi Dev-Husnain

View GitHub Profile
@Dev-Husnain
Dev-Husnain / CropImageView.kt
Created December 8, 2025 03:18
Simple CropImageView Class.A custom ImageView that provides an interactive crop overlay with dragging and resizing capabilities. Features: Rounded corner crop rectangle with customizable radius Interactive corner and side handles for resizing Drag to move the entire crop area Configurable visual appearance (colors, sizes, styles) Hardware-accele…
package com.example.views
import android.content.Context
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.Path
import android.graphics.RectF
import android.graphics.drawable.Drawable
import android.util.AttributeSet
<com.com.ZoomImageView
android:id="@+id/ivMedia"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@id/clBottom"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/actionBar" />
@Dev-Husnain
Dev-Husnain / CustomTabBar.kt
Created July 8, 2025 20:41
Custom BottomNavigation And Tabs in Android
package com.example.views
import android.content.Context
import android.graphics.Color
import android.graphics.PorterDuff
import android.graphics.Typeface
import android.util.AttributeSet
import android.util.TypedValue
import android.view.Gravity
import android.view.View
@Dev-Husnain
Dev-Husnain / DotsIndicatorView.kt
Last active April 22, 2025 07:42
DotsIndicatorView
import android.animation.ValueAnimator
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.GradientDrawable
import android.util.AttributeSet
import android.view.Gravity
import android.view.View
import android.widget.FrameLayout
import android.widget.LinearLayout
@Dev-Husnain
Dev-Husnain / CustomView.kt
Last active April 17, 2025 19:33
CustomView ( The View of different corner radius, backgrounds, rippleColor, shadowColor etc)
class CustomView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {
private var cornerRadiusTopLeft = 0f
private var cornerRadiusTopRight = 0f
private var cornerRadiusBottomLeft = 0f
private var cornerRadiusBottomRight = 0f
private var strokeWidth = 0
@Dev-Husnain
Dev-Husnain / CustomRadioGroup.kt
Last active April 17, 2025 19:07
CustomRadioView & CustomRadioGroup (Customize you views).
class CustomRadioGroup @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null
) : ConstraintLayout(context, attrs) {
private var checkedView: CustomRadioView? = null
private var listener: ((CustomRadioView) -> Unit)? = null
fun setOnCheckedChangeListener(listener: (CustomRadioView) -> Unit) {
this.listener = listener
}
@Dev-Husnain
Dev-Husnain / AnnotatedString.kt
Created June 1, 2024 11:53
Annotated String in Jetpack Compose. Change style of any word from string and also you can make that word clickable.
@Composable
fun AnnotatedString() {
Box(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp)
) {
val list = rememberSaveable {
listOf(
@Dev-Husnain
Dev-Husnain / MusicKnob.kt
Created June 1, 2024 11:34
Music Knob with Jetpack Compose. Knob Will be constraint with given angles and will not rotate beyond specified angles.
@Composable
fun MusicKnobScreen() {
Box(contentAlignment = Alignment.Center,
modifier = Modifier.fillMaxSize().background(Color(0xFF101010))) {
Row(verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Center,
modifier = Modifier
.padding(horizontal = 10.dp)
.border(1.dp, color = Color.Green, RoundedCornerShape(10.dp))