neco2018

DrawApp | #3

MainActivity.kt import android.os.Bundle import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.Canvas import androidx.compose.foundation.gestures.detectDragGestures import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Path import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.drawscope.Stroke import androidx.compose.ui.input.pointer.pointerInput import com.neco_desarrollo.drawapp.ui.BottomPanel import com.neco_desarrollo.drawapp.ui.PathData import com.neco_desarrollo.drawapp.ui.theme.DrawAppThemeclass MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val pathData = remember { mutableStateOf(PathData()) } DrawAppTheme { Column { DrawCanvas(pathData) BottomPanel(… Подробнее »DrawApp | #3

Draw App: #2

https://youtu.be/NAsEr7bPltw MainActivity.kt import android.os.Bundle import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.Canvas import androidx.compose.foundation.gestures.detectDragGestures import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Path import androidx.compose.ui.graphics.drawscope.Stroke import androidx.compose.ui.input.pointer.pointerInput import com.neco_desarrollo.drawapp.ui.BottomPanel import com.neco_desarrollo.drawapp.ui.PathData import com.neco_desarrollo.drawapp.ui.theme.DrawAppThemeclass MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val pathData = remember { mutableStateOf(PathData()) } DrawAppTheme { Column { DrawCanvas(pathData) BottomPanel{ color… Подробнее »Draw App: #2

Draw App

MainActivity.kt import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.Canvas import androidx.compose.foundation.gestures.detectDragGestures import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Path import androidx.compose.ui.graphics.drawscope.Stroke import androidx.compose.ui.input.pointer.pointerInput import com.neco_desarrollo.drawapp.ui.theme.DrawAppThemeclass MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { DrawAppTheme { DrawCanvas() } } }}@Composablefun DrawCanvas() { val tempPath = Path() val path = remember { mutableStateOf(Path()) } Canvas( modifier = Modifier .fillMaxSize() .pointerInput(true) { detectDragGestures… Подробнее »Draw App

ConstrainLayout

Зависимости в build.gradle: implementation(“androidx.constraintlayout:constraintlayout-compose:1.0.1”) MainActivity.kt import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.Image import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.Button import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.constraintlayout.compose.ConstraintLayout import com.neco_desarrollo.constrainlayoutlessony.ui.theme.ConstrainLayoutLessonYThemeclass MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { ConstrainLayoutLessonYTheme { GreetingPreview() } } }}@Preview(showBackground = true)@Composablefun GreetingPreview() { ConstraintLayout(modifier = Modifier.fillMaxSize()) { val (text, button, image) = createRefs() val bottomGuideLine = createGuidelineFromBottom(0.2f) Button(onClick… Подробнее »ConstrainLayout

Custom View #2 (onTouchEvent)

TestView.kt import android.content.Context import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.util.AttributeSet import android.view.MotionEvent import android.view.Viewclass TestView( context: Context, attributeSet: AttributeSet) : View(context, attributeSet) { private val paint = Paint() private val paintC = Paint() private val startAngle = -180f private val colors = listOf( Color.RED, Color.BLUE, Color.GREEN, Color.YELLOW ) private val sweepAngle = 360f / colors.size private var buttonClicked = -1 init { paint.style = Paint.Style.STROKE paint.color = Color.GRAY paint.strokeWidth… Подробнее »Custom View #2 (onTouchEvent)

MenuProvider

https://youtu.be/zfGS-c3qaAE MainActivity.kt import androidx.appcompat.app.AppCompatActivityimport android.os.Bundleclass MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) supportFragmentManager .beginTransaction() .replace(R.id.host, MainFragment.newInstance()) .commit() }} MainFragment.kt import android.os.Bundle import android.view.LayoutInflater import android.view.Menu import android.view.MenuInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.core.view.MenuProvider import androidx.fragment.app.Fragmentclass MainFragment : Fragment(), MenuProvider{ override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_main, container, false)… Подробнее »MenuProvider

CustomView #1

TestView.kt import android.content.Context import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.util.AttributeSet import android.view.Viewclass TestView( context: Context, attributeSet: AttributeSet) : View(context, attributeSet) { private val paint = Paint() private val paintC = Paint() init { paint.style = Paint.Style.STROKE paint.color = Color.GRAY paint.strokeWidth = 5f paintC.style = Paint.Style.FILL paintC.color = Color.RED } override fun onDraw(canvas: Canvas) { super.onDraw(canvas) canvas.drawCircle((width / 2).toFloat(), (height / 2).toFloat(), 100f, paintC) canvas.drawRect(0f, 0f, width.toFloat(), height.toFloat(), paint) }}… Подробнее »CustomView #1

Lottie animation Jetpack Compose

Зависимости в build.gradle: implementation(“com.airbnb.android:lottie-compose:6.1.0”) settings.gradle: maven { setUrl(“https://oss.sonatype.org/content/repositories/snapshots/”) } MianActivity: class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { ComposeLottieTheme { val composition by rememberLottieComposition( spec = LottieCompositionSpec.Asset(“anim.json”) ) var isPlaying by remember { mutableStateOf(false) } var isComplete by remember { mutableStateOf(false) } val animSpec = LottieClipSpec.Progress( 0f, if(isComplete) 1f else 0.5f ) Column( modifier = Modifier.fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally ) { LottieAnimation( composition = composition,… Подробнее »Lottie animation Jetpack Compose

Lottie animation

Зависимости в build.gradle: implementation(“com.airbnb.android:lottie:6.1.0”) MainActivity: import androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport com.airbnb.lottie.LottieDrawableimport com.neco_desarrollo.lottielesson.databinding.ActivityMainBindingclass MainActivity : AppCompatActivity() { lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) binding.apply { download.setOnClickListener { lottieView.setMinProgress(0.0f) lottieView.setMaxProgress(0.59f) lottieView.repeatCount = LottieDrawable.INFINITE lottieView.repeatMode = LottieDrawable.REVERSE lottieView.playAnimation() } stopDownload.setOnClickListener { lottieView.setMinProgress(0.59f) lottieView.setMaxProgress(0.75f) lottieView.repeatCount = 0 lottieView.repeatMode = LottieDrawable.RESTART lottieView.playAnimation() } fullAnim.setOnClickListener { lottieView.setMinProgress(0.0f) lottieView.setMaxProgress(1.0f) lottieView.repeatCount = 0 lottieView.repeatMode = LottieDrawable.RESTART lottieView.playAnimation() } } }}

Single line Chart in Jetpack Compose

build.gradle (app) implementation (“co.yml:ycharts:2.1.0”) MainActivity.kt import android.os.Bundleimport android.util.Logimport androidx.activity.ComponentActivityimport androidx.activity.compose.setContentimport androidx.compose.foundation.layout.fillMaxWidthimport androidx.compose.foundation.layout.heightimport androidx.compose.ui.Modifierimport androidx.compose.ui.graphics.Colorimport androidx.compose.ui.unit.dpimport co.yml.charts.axis.AxisDataimport co.yml.charts.common.model.Pointimport co.yml.charts.ui.linechart.LineChartimport co.yml.charts.ui.linechart.model.GridLinesimport co.yml.charts.ui.linechart.model.IntersectionPointimport co.yml.charts.ui.linechart.model.Lineimport co.yml.charts.ui.linechart.model.LineChartDataimport co.yml.charts.ui.linechart.model.LinePlotDataimport co.yml.charts.ui.linechart.model.LineStyleimport co.yml.charts.ui.linechart.model.SelectionHighlightPointimport co.yml.charts.ui.linechart.model.SelectionHighlightPopUpimport co.yml.charts.ui.linechart.model.ShadowUnderLineimport com.neco_desarrollo.singlelinechart.ui.theme.SingleLineChartThemeimport kotlin.random.Randomconst val steps = 10class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val pointsList = getPointsList() val max = getMax(pointsList) val min = getMin(pointsList) Log.d(“MyLog”, “Max: $max Min: $min”) val xAxisData = AxisData.Builder() .axisStepSize(100.dp) .backgroundColor(Color.Transparent) .steps(pointsList.size -… Подробнее »Single line Chart in Jetpack Compose