diff options
author | Ognjen Cirkovic <ciraboxkg@gmail.com> | 2022-12-12 20:58:19 +0100 |
---|---|---|
committer | Ognjen Cirkovic <ciraboxkg@gmail.com> | 2022-12-12 20:58:19 +0100 |
commit | 1569545d3908daf74ad863c33377fa28bf100b63 (patch) | |
tree | 6af4e1e7575b6316e275840e68359924366180eb /Client | |
parent | cb8a7f652aa308997a4dd7257fe9b70f78f33dda (diff) |
Dodate tackice koje pokazuju trenutnu lokaciju u navigaciji slika.(Tackice na skrolovanje kroz slike)
Diffstat (limited to 'Client')
3 files changed, 128 insertions, 1 deletions
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityOpenedImages.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityOpenedImages.kt index d1f1e4c..f1c704e 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityOpenedImages.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityOpenedImages.kt @@ -1,5 +1,6 @@ package com.example.brzodolokacije.Activities +import LinePagerIndicatorDecoration import android.graphics.Bitmap import android.graphics.drawable.Drawable import android.os.Build @@ -7,6 +8,7 @@ import android.os.Bundle import android.provider.MediaStore import android.widget.Toast import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.PagerSnapHelper import androidx.recyclerview.widget.RecyclerView @@ -17,6 +19,7 @@ import com.bumptech.glide.request.transition.Transition import com.example.brzodolokacije.Adapters.OpenedPostImageAdapter import com.example.brzodolokacije.Models.PostImage import com.example.brzodolokacije.Models.PostPreview +import com.example.brzodolokacije.R import com.example.brzodolokacije.Services.RetrofitHelper import com.example.brzodolokacije.databinding.ActivityOpenedImagesBinding import java.util.* @@ -78,6 +81,11 @@ class ActivityOpenedImages : AppCompatActivity() { snap.attachToRecyclerView(rvImages) rvImages!!.layoutManager=linearLayout rvImages!!.adapter=adapter + //tackice + var color = ContextCompat.getColor(this@ActivityOpenedImages, R.color.unfollow) + var color1 = ContextCompat.getColor(this@ActivityOpenedImages, R.color.button_main) + if(images!!.size>1) + rvImages!!.addItemDecoration(LinePagerIndicatorDecoration(10,10,100,color,color1)) } }
\ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt index 902a985..3ad60de 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt @@ -1,12 +1,13 @@ package com.example.brzodolokacije.Activities +import LinePagerIndicatorDecoration import android.content.Intent import android.graphics.Color -import android.graphics.drawable.GradientDrawable import android.os.Bundle import android.preference.PreferenceManager import android.util.TypedValue import android.view.ViewGroup +import android.view.ViewGroup.MarginLayoutParams import android.widget.* import androidx.appcompat.app.AppCompatActivity import androidx.constraintlayout.widget.ConstraintLayout @@ -35,6 +36,7 @@ import com.example.brzodolokacije.Services.RetrofitHelper import com.example.brzodolokacije.Services.SharedPreferencesHelper import com.example.brzodolokacije.databinding.ActivitySinglePostBinding import com.google.gson.Gson +import kotlinx.android.synthetic.main.activity_single_post.* import org.osmdroid.config.Configuration import org.osmdroid.tileprovider.tilesource.TileSourceFactory import org.osmdroid.util.GeoPoint @@ -89,6 +91,7 @@ class ActivitySinglePost : AppCompatActivity(),OnRefreshListener { btnChangeHeightUp.isClickable=true linearLayout2=findViewById(R.id.linearLayout2) + linearLayout2.setOnClickListener { linearLayout2.getLayoutParams().height= ViewGroup.LayoutParams.MATCH_PARENT; } @@ -99,6 +102,11 @@ class ActivitySinglePost : AppCompatActivity(),OnRefreshListener { adapterImages= PostImageAdapter(this@ActivitySinglePost, post.images as MutableList<PostImage>) layoutManagerImages= LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false) recyclerViewImages = binding.rvMain + //tackice image + var color = ContextCompat.getColor(this@ActivitySinglePost, R.color.unfollow) + var color1 = ContextCompat.getColor(this@ActivitySinglePost, R.color.button_main) + if(post.images.size>1) + recyclerViewImages!!.addItemDecoration(LinePagerIndicatorDecoration(10,10,100,color,color1)) //DODATI SLIKE recyclerViewImages?.setHasFixedSize(true) diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Services/LinePagerIndicatorDecoration.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Services/LinePagerIndicatorDecoration.kt new file mode 100644 index 0000000..31f03ab --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Services/LinePagerIndicatorDecoration.kt @@ -0,0 +1,111 @@ +import android.content.res.Resources +import android.graphics.Canvas +import android.graphics.Paint +import android.graphics.Rect +import android.view.View +import androidx.annotation.ColorInt +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.RecyclerView.ItemDecoration + + +class LinePagerIndicatorDecoration( + radius: Int, + padding: Int, + indicatorHeight: Int, + @ColorInt colorInactive: Int, + @ColorInt colorActive: Int +) : + ItemDecoration() { + private val indicatorHeight: Int + private val indicatorItemPadding: Int + private val radius: Int + private val inactivePaint: Paint = Paint() + private val activePaint: Paint = Paint() + + init { + val strokeWidth: Float = Resources.getSystem().getDisplayMetrics().density * 1 + this.radius = radius + inactivePaint.setStrokeCap(Paint.Cap.ROUND) + inactivePaint.setStrokeWidth(strokeWidth) + inactivePaint.setStyle(Paint.Style.STROKE) + inactivePaint.setAntiAlias(true) + inactivePaint.setColor(colorInactive) + activePaint.setStrokeCap(Paint.Cap.ROUND) + activePaint.setStrokeWidth(strokeWidth) + activePaint.setStyle(Paint.Style.FILL) + activePaint.setAntiAlias(true) + activePaint.setColor(colorActive) + indicatorItemPadding = padding + this.indicatorHeight = indicatorHeight + } + + override fun onDrawOver(c: Canvas, parent: RecyclerView, state: RecyclerView.State) { + super.onDrawOver(c, parent, state) + val adapter = parent.adapter ?: return + val itemCount = adapter.itemCount + + // center horizontally, calculate width and subtract half from center + val totalLength = (radius * 2 * itemCount).toFloat() + val paddingBetweenItems = (Math.max(0, itemCount - 1) * indicatorItemPadding).toFloat() + val indicatorTotalWidth = totalLength + paddingBetweenItems + val indicatorStartX = (parent.width - indicatorTotalWidth) / 2f + + // center vertically in the allotted space + val indicatorPosY = parent.height - indicatorHeight / 2f + drawInactiveDots(c, indicatorStartX, indicatorPosY, itemCount) + val activePosition: Int + activePosition = if (parent.layoutManager is GridLayoutManager) { + (parent.layoutManager as GridLayoutManager?)!!.findFirstVisibleItemPosition() + } else if (parent.layoutManager is LinearLayoutManager) { + (parent.layoutManager as LinearLayoutManager?)!!.findFirstVisibleItemPosition() + } else { + // not supported layout manager + return + } + if (activePosition == RecyclerView.NO_POSITION) { + return + } + + // find offset of active page if the user is scrolling + val activeChild = parent.layoutManager!!.findViewByPosition(activePosition) + ?: return + drawActiveDot(c, indicatorStartX, indicatorPosY, activePosition) + } + + private fun drawInactiveDots( + c: Canvas, + indicatorStartX: Float, + indicatorPosY: Float, + itemCount: Int + ) { + // width of item indicator including padding + val itemWidth = (radius * 2 + indicatorItemPadding).toFloat() + var start = indicatorStartX + radius + for (i in 0 until itemCount) { + c.drawCircle(start, indicatorPosY, radius.toFloat(), inactivePaint) + start += itemWidth + } + } + + private fun drawActiveDot( + c: Canvas, indicatorStartX: Float, indicatorPosY: Float, + highlightPosition: Int + ) { + // width of item indicator including padding + val itemWidth = (radius * 2 + indicatorItemPadding).toFloat() + val highlightStart = indicatorStartX + radius + itemWidth * highlightPosition + c.drawCircle(highlightStart, indicatorPosY, radius.toFloat(), activePaint) + } + + override fun getItemOffsets( + outRect: Rect, + view: View, + parent: RecyclerView, + state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + outRect.bottom = indicatorHeight + } +}
\ No newline at end of file |