Блог

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

Search Bar – Material 3 | Jetpack Compose

Зависимость Material 3: implementation(“androidx.compose.material3:material3:1.1.1”) MainActivity: import android.os.Bundleimport androidx.activity.ComponentActivityimport androidx.activity.compose.setContentimport androidx.compose.foundation.clickableimport androidx.compose.foundation.layout.Boximport androidx.compose.foundation.layout.Columnimport androidx.compose.foundation.layout.fillMaxSizeimport androidx.compose.foundation.layout.fillMaxWidthimport androidx.compose.foundation.layout.paddingimport androidx.compose.foundation.lazy.LazyColumnimport androidx.compose.foundation.lazy.itemsimport androidx.compose.material3.ExperimentalMaterial3Apiimport androidx.compose.material3.SearchBarimport androidx.compose.material3.Textimport androidx.compose.runtime.mutableStateOfimport androidx.compose.runtime.rememberimport androidx.compose.ui.Alignmentimport androidx.compose.ui.Modifierimport androidx.compose.ui.unit.dpimport com.neco_desarrollo.material3searchbar.ui.theme.Material3SearchBarThemeclass MainActivity : ComponentActivity() { @OptIn(ExperimentalMaterial3Api::class) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val searchText = remember{ mutableStateOf(“”) } val mainList = remember{ mutableStateOf(Utils.originUsersList) } val isActive = remember{ mutableStateOf(false) } Material3SearchBarTheme { Column(Modifier.fillMaxSize()) { SearchBar( modifier = Modifier .fillMaxWidth() .padding(10.dp) , query =… Подробнее »Search Bar – Material 3 | Jetpack Compose

InfoApp Jetpack Compose | #6

Зависимость в build.gradle: implementation “androidx.constraintlayout:constraintlayout-compose:1.0.1” Dao.kt import androidx.room.Daoimport androidx.room.Deleteimport androidx.room.Insertimport androidx.room.OnConflictStrategyimport androidx.room.Queryimport com.example.infoapp.utils.ListItemimport kotlinx.coroutines.flow.Flow@Daointerface Dao { @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insertItem(item: ListItem) @Delete suspend fun deleteItem(item: ListItem) @Query(“SELECT * FROM main WHERE category LIKE :cat”) fun getAllItemsByCategory(cat: String): Flow<List<ListItem>> @Query(“SELECT * FROM main WHERE isFav = 1”) fun getFavorites(): Flow<List<ListItem>>} MainViewModel.kt import androidx.compose.runtime.mutableStateOfimport androidx.compose.ui.graphics.Colorimport androidx.lifecycle.ViewModelimport androidx.lifecycle.viewModelScopeimport com.example.infoapp.db.MainDbimport com.example.infoapp.ui.theme.MainRedimport com.example.infoapp.utils.ListItemimport dagger.hilt.android.lifecycle.HiltViewModelimport kotlinx.coroutines.Jobimport kotlinx.coroutines.flow.collectimport kotlinx.coroutines.launchimport javax.inject.Inject@HiltViewModelclass MainViewModel @Inject constructor( val mainDb:… Подробнее »InfoApp Jetpack Compose | #6

InfoApp Jetpack Compose | #5

Зависимости в build.gradle: implementation ‘com.google.dagger:hilt-android:2.46.1’implementation ‘androidx.hilt:hilt-navigation-compose:1.0.0’kapt ‘com.google.dagger:hilt-compiler:2.46.1’implementation ‘androidx.room:room-ktx:2.5.2’kapt ‘androidx.room:room-compiler:2.5.2’def nav_version = “2.5.3”implementation(“androidx.navigation:navigation-compose:$nav_version”) App.kt import android.app.Applicationimport dagger.hilt.android.HiltAndroidApp@HiltAndroidAppclass App : Application() {} AndroidManifest.kt <?xml version=”1.0″ encoding=”utf-8″?><manifest xmlns:android=”http://schemas.android.com/apk/res/android” xmlns:tools=”http://schemas.android.com/tools”> <application android:name=”.App” android:allowBackup=”true” android:dataExtractionRules=”@xml/data_extraction_rules” android:fullBackupContent=”@xml/backup_rules” android:icon=”@mipmap/ic_launcher” android:label=”@string/app_name” android:supportsRtl=”true” android:theme=”@style/Theme.InfoApp” tools:targetApi=”31″> <activity android:name=”.MainActivity” android:exported=”true” android:label=”@string/app_name” android:theme=”@style/Theme.InfoApp”> <intent-filter> <action android:name=”android.intent.action.MAIN” /> <category android:name=”android.intent.category.LAUNCHER” /> </intent-filter> </activity> </application></manifest> MainDb.kt import androidx.room.Databaseimport androidx.room.RoomDatabaseimport com.example.infoapp.utils.ListItem@Database( entities = [ListItem::class], version = 1)abstract class MainDb : RoomDatabase() { abstract val dao:… Подробнее »InfoApp Jetpack Compose | #5

Room – Jetpack Compose

MainActivity.kt import android.os.Bundleimport androidx.activity.ComponentActivityimport androidx.activity.compose.setContentimport com.neco_desarrollo.roomdb.ui.MainScreenimport com.neco_desarrollo.roomdb.ui.theme.RoomDbThemeclass MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { RoomDbTheme { MainScreen() } } }} Dao.kt import androidx.room.Daoimport androidx.room.Deleteimport androidx.room.Insertimport androidx.room.OnConflictStrategyimport androidx.room.Queryimport androidx.room.Updateimport kotlinx.coroutines.flow.Flow@Daointerface Dao { @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insertItem(nameEntity: NameEntity) @Delete suspend fun deleteItem(nameEntity: NameEntity) @Query(“SELECT * FROM name_table”) fun getAllItems(): Flow<List<NameEntity>>} NameEntity.kt import androidx.room.Entityimport androidx.room.PrimaryKey@Entity(tableName = “name_table”)data class NameEntity( @PrimaryKey(autoGenerate = true) val id: Int? =… Подробнее »Room – Jetpack Compose

RewardedAd – Jetpack Compose

MainActivity.kt import android.os.Bundleimport android.widget.Toastimport androidx.activity.ComponentActivityimport androidx.activity.compose.setContentimport androidx.compose.foundation.layout.Boximport androidx.compose.foundation.layout.fillMaxSizeimport androidx.compose.foundation.layout.wrapContentHeightimport androidx.compose.foundation.layout.wrapContentWidthimport androidx.compose.material3.Buttonimport androidx.compose.material3.Textimport androidx.compose.ui.Alignmentimport androidx.compose.ui.Modifierimport com.google.android.gms.ads.AdErrorimport com.google.android.gms.ads.AdRequestimport com.google.android.gms.ads.FullScreenContentCallbackimport com.google.android.gms.ads.LoadAdErrorimport com.google.android.gms.ads.MobileAdsimport com.google.android.gms.ads.rewarded.RewardedAdimport com.google.android.gms.ads.rewarded.RewardedAdLoadCallbackimport com.neco_desarrollo.videorewardcompose.ui.theme.VideoRewardComposeThemeconst val AD_ID = “ca-app-pub-3940256099942544/5224354917″class MainActivity : ComponentActivity() { private var rewardedAd: RewardedAd? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) MobileAds.initialize(this) loadAd() setContent { VideoRewardComposeTheme { Box( modifier = Modifier .fillMaxSize() .wrapContentHeight(align = Alignment.Bottom) .wrapContentWidth(align = Alignment.CenterHorizontally) ){ Button(onClick = { rewardedAd?.show(this@MainActivity){ item -> Toast.makeText( this@MainActivity, “Reward: ${item.amount}”,… Подробнее »RewardedAd – Jetpack Compose

Yandex & AdMob Banner – Jetpack Compose

YandexBanner import androidx.compose.runtime.Composableimport androidx.compose.ui.viewinterop.AndroidViewimport com.yandex.mobile.ads.banner.AdSizeimport com.yandex.mobile.ads.banner.BannerAdEventListenerimport com.yandex.mobile.ads.banner.BannerAdViewimport com.yandex.mobile.ads.common.AdRequestimport com.yandex.mobile.ads.common.AdRequestErrorimport com.yandex.mobile.ads.common.ImpressionData@Composablefun Banner(id: Int) { AndroidView(factory = { context -> BannerAdView(context).apply { setAdUnitId(context.getString(id)) setAdSize(AdSize.stickySize(context, 300)) val adRequest = AdRequest.Builder().build() setBannerAdEventListener(object : BannerAdEventListener{ override fun onAdLoaded() { } override fun onAdFailedToLoad(p0: AdRequestError) { } override fun onAdClicked() { } override fun onLeftApplication() { } override fun onReturnedToApplication() { } override fun onImpression(p0: ImpressionData?) { } }) loadAd(adRequest) } })} AdMobBanner.kt import androidx.compose.runtime.Composableimport androidx.compose.ui.viewinterop.AndroidViewimport… Подробнее »Yandex & AdMob Banner – Jetpack Compose

AlarmManager | XML

FirstFragment.kt import android.app.AlarmManagerimport android.app.PendingIntentimport android.content.Contextimport android.content.Intentimport android.icu.util.Calendarimport android.os.Bundleimport android.os.SystemClockimport androidx.fragment.app.Fragmentimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport androidx.navigation.fragment.findNavControllerimport com.neco_desarrollo.alarmmanager.databinding.FragmentFirstBindingclass FirstFragment : Fragment() { private val calendar = Calendar.getInstance() private lateinit var alarmIntent: PendingIntent private var alarmManager: AlarmManager? = null private var _binding: FragmentFirstBinding? = null private val binding get() = _binding!! override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { _binding = FragmentFirstBinding.inflate(inflater, container, false) return binding.root } override fun onViewCreated(view:… Подробнее »AlarmManager | XML