Функция для анимации ImageView в RecyclerView - PullRequest
0 голосов
/ 02 апреля 2019

Чтобы переслать мое приложение, мне нужна функция, которая будет вращать изображение в представлении recycler.RecyclelerView - это одно из 3 представлений переработчика, которые уже работают хорошо, и на них можно нажимать с помощью cardView.короткое видео там:

https://mega.nz/#!W6AyAYaY!07WG8kr_POYiGsgt0yja6fk8RaclZLw2-MiMFrmEQmk

Я создал классы с несколькими членами, которые позволяют узнать состояние объектов.

Я новичок в программировании Android, имне было трудно заставить работать этот recyclerView: -)

7 апреля: мне наконец-то удалось реализовать свою функцию, но результат странный!там можно увидеть: https://mega.nz/#!DzI2iaiB!VBG9Ex4TZlAsoUYPSRhXXMP4weH-9hXyjbqF1nCRyeA

Есть изображение, которое вращается, но это левое, а не нажатое, и есть смесь, обмен изображениями.

У меня такой вопрос: являются ли imageViews кликабельными и фокусируемыми, как cardViews?если это так, я могу попытаться сделать imageView фокусируемым и кликабельным (на самом деле cardView - это ...) Как насчет индекса есть recyclerViews?Разве это не просмотр карты, у которого есть индекс?или левый на экране?Я озадачен: -)

Следующее: макет с CardView и imageView;MainActivity, где я пытался написать функцию;и Адаптер для Top RecyclerView, где функция должна повернуть (180 °) imageView на индекс (индекс, тег и позиция)

 no change about that xml file    
<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">
  <androidx.cardview.widget.CardView
        android:id="@+id/flag_card_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:focusable="true"
        android:clickable="true"
        android:foreground="?android:attr/selectableItemBackground">
    <androidx.constraintlayout.widget.ConstraintLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"

            xmlns:app="http://schemas.android.com/apk/res-auto">

<ImageView
        android:id="@+id/flagcountry"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        app:layout_constraintDimensionRatio="W,55:100"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginLeft="2dp"/>

<TextView
        android:id="@+id/flagname"
        android:layout_width="6dp"
        android:layout_height="match_parent"
        app:layout_constraintLeft_toRightOf="@id/flagcountry"
        android:layout_centerVertical="true"/>
    </androidx.constraintlayout.widget.ConstraintLayout>
   </androidx.cardview.widget.CardView>
   </RelativeLayout>

 under new kt file
   package training.geography.triplerecyclerview

    import android.provider.Settings.Global.getString
    import android.view.LayoutInflater
    import android.view.View
    import android.view.ViewGroup
    import android.widget.ImageView
    import android.widget.TextView
    import androidx.cardview.widget.CardView
    import androidx.recyclerview.widget.RecyclerView

   class FlagAdapter(val flagcountrylist: List<FlagCard>,
              val flagitemClickListener : View.OnClickListener
              //val flagitemOnLongClickListener : View.OnLongClickListener
):
RecyclerView.Adapter<FlagAdapter.FlagViewHolder> () {
class FlagViewHolder(flagView: View) : RecyclerView.ViewHolder(flagView) {
    val flagcardView = flagView.findViewById<CardView>(R.id.flag_card_view)
    val flagcountry = flagView.findViewById<ImageView>(R.id.flagcountry)
    val flagname = flagView.findViewById<TextView>(R.id.flagname)
}

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int):
    FlagViewHolder {
    val inflater = LayoutInflater.from(parent.context)
    val viewItem = inflater.inflate(R.layout.item_flag, parent, false)
    return FlagViewHolder(viewItem)
}

override fun onBindViewHolder(flagholder: FlagViewHolder, position: Int) {
    //val flagcountry: String = flagcountrylist.FlagCard.flagimage[position]
    //var flagimageList: List<String> = flagcountrylist.map { it.flagimage }
    var flagsouthList: List<String> = flagcountrylist.map { it.flagsouth }
    var iflagsouth = flagsouthList[position]
    flagholder.flagname.text = iflagsouth
    flagholder.flagcardView.tag = position
    flagholder.flagcardView.setOnClickListener(flagitemClickListener)
    //flagholder.flagcardView.setOnLongClickListener(itemOnLongClickListener)

    when (position){
        0 -> flagholder.flagcountry.setImageResource(R.drawable.afgcol)
        1 -> flagholder.flagcountry.setImageResource(R.drawable.argsvk)
        2 -> flagholder.flagcountry.setImageResource(R.drawable.armche)
        3 -> flagholder.flagcountry.setImageResource(R.drawable.auttgo)
        4 -> flagholder.flagcountry.setImageResource(R.drawable.azepry)
        5 -> flagholder.flagcountry.setImageResource(R.drawable.bhrtur)
        6 -> flagholder.flagcountry.setImageResource(R.drawable.bratls)
        7 -> flagholder.flagcountry.setImageResource(R.drawable.bwasur)
        8 -> flagholder.flagcountry.setImageResource(R.drawable.cafbtn)
        9 -> flagholder.flagcountry.setImageResource(R.drawable.critun)
        10 -> flagholder.flagcountry.setImageResource(R.drawable.pandza)
        11 -> flagholder.flagcountry.setImageResource(R.drawable.persau)
        12 -> flagholder.flagcountry.setImageResource(R.drawable.svnago)
        13 -> flagholder.flagcountry.setImageResource(R.drawable.sweben)
        14 -> flagholder.flagcountry.setImageResource(R.drawable.tcdgbr)
        15 -> flagholder.flagcountry.setImageResource(R.drawable.thabol)
        16 -> flagholder.flagcountry.setImageResource(R.drawable.tjkdeu)
        17 -> flagholder.flagcountry.setImageResource(R.drawable.tkmbel)
        18 -> flagholder.flagcountry.setImageResource(R.drawable.tzablz)
        19 -> flagholder.flagcountry.setImageResource(R.drawable.ukrcmr)
        20 -> flagholder.flagcountry.setImageResource(R.drawable.uryblr)
        21 -> flagholder.flagcountry.setImageResource(R.drawable.venbgd)
        22 -> flagholder.flagcountry.setImageResource(R.drawable.vnmbfa)
        23 -> flagholder.flagcountry.setImageResource(R.drawable.yembih)
        24 -> flagholder.flagcountry.setImageResource(R.drawable.zmbchl)
        25 -> flagholder.flagcountry.setImageResource(R.drawable.zwealb)
    }
    //var iflagcard:String  = imagelist[position]
 //holder.flagcountry.setImageResource(iflagcard)
}

override fun getItemCount(): Int {
        return flagcountrylist.size
    }
}


---------------------------------------
 //under new MainActivity file with function modified
 // i don't know what to do with the variable 
 // flagtempup, i use it to set the string in 
 // iflagtrigramdown, and i have te warning variable not used...


 package training.geography.triplerecyclerview

 import android.nfc.Tag
 import android.os.Bundle
 import android.view.View
 import android.view.View.OnClickListener
 import android.view.animation.Animation
 import android.view.animation.RotateAnimation
 import android.widget.ImageView
 import android.widget.Toast
 import androidx.appcompat.app.AppCompatActivity
 import androidx.cardview.widget.CardView
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
 import kotlinx.android.synthetic.main.item_flag.*

 data class FlagCard(var flagtrigramup: String, var flagtrigramdown: String,
                    var flagimage: String, var flagsouth: String, var  rotationpossible: Boolean=(true))

  data class CountryCard(val countrytrigram: String, val description: String)

  data class MapCard(var map_left_up: String,
               var map_right_up: String,
               var map_left_down: String,
               var map_right_down: String,
               var maps_img: String,
               var mapnorth: String)


  class MainActivity : AppCompatActivity(), OnClickListener {


var afg_col = FlagCard("col", "afg", "afgcol", "afg", true)
var arg_svk = FlagCard("arg", "svk", "argsvk", "svk", true)
var arm_che = FlagCard("che", "arm", "armche", "arm", true)
var aut_tgo = FlagCard("tgo", "aut", "auttgo", "aut", true)
var aze_pry = FlagCard("aze", "pry", "azepry", "pry", true)
var bhr_tur = FlagCard("tur", "bhr", "bhrtur", "bhr", true)
var bra_tls = FlagCard("tls", "bra", "bratls", "bra", true)
var bwa_sur = FlagCard("sur", "bwa", "bwasur", "bwa", true)
var caf_btn = FlagCard("btn", "caf", "cafbtn", "caf", true)
var cri_tun = FlagCard("cri", "tun", "critun", "tun", true)
var pan_dza = FlagCard("pan", "dza", "pandza", "dza", true)
var per_sau = FlagCard("per", "sau", "persau", "sau", true)
var svn_ago = FlagCard("svn", "ago", "svnago", "ago", true)
var swe_ben = FlagCard("swe", "ben", "sweben", "ben", true)
var tcd_gbr = FlagCard("tcd", "gbr", "tcdgbr", "gbr", true)
var tha_bol = FlagCard("tha", "bol", "thabol", "bol", true)
var tjk_deu = FlagCard("tjk", "deu", "tjkdeu", "deu", true)
var tkm_bel = FlagCard("tkm", "bel", "tkmbel", "bel", true)
var tza_blz = FlagCard("tza", "blz", "tzablz", "blz", true)
var ukr_cmr = FlagCard("ukr", "cmr", "ukrcmr", "cmr", true)
var ury_blr = FlagCard("ury", "blr", "uryblr", "blr", true)
var ven_bgd = FlagCard("ven", "bgd", "venbgd", "bgd", true)
var vnm_bfa = FlagCard("vnm", "bfa", "vnmbfa", "bfa", true)
var yem_bih = FlagCard("yem", "bih", "yembih", "bih", true)
var zmb_chl = FlagCard("zmb", "chl", "zmbchl", "chl", true)
var zwe_alb = FlagCard("zwe", "alb", "zwealb", "alb", true)

var afg = CountryCard("afg", "afg")
var ago = CountryCard("ago", "ago")
var alb = CountryCard("alb", "alb")
var arg = CountryCard("arg", "arg")
var arm = CountryCard("arm", "arm")
var aut = CountryCard("aut", "aut")
var aze = CountryCard("aze", "aze")
var bel = CountryCard("bel", "bel")
var bfa = CountryCard("bfa", "bfa")
var bhr = CountryCard("bhr", "bhr")
var bih = CountryCard("bih", "bih")
var blz = CountryCard("blz", "blz")
var bol = CountryCard("bol", "bol")
var bra = CountryCard("bra", "bra")
var btn = CountryCard("btn", "btn")
var bwa = CountryCard("bwa", "bwa")
var caf = CountryCard("caf", "caf")
var che = CountryCard("che", "che")
var chl = CountryCard("chl", "chl")
var cmr = CountryCard("cmr", "cmr")
var col = CountryCard("col", "col")
var cri = CountryCard("cri", "cri")
var deu = CountryCard("deu", "deu")
var gbr = CountryCard("gbr", "gbr")
var pan = CountryCard("pan", "pan")
var per = CountryCard("per", "per")
var pry = CountryCard("pry", "pry")
var sau = CountryCard("sau", "sau")
var sur = CountryCard("sur", "sur")
var svk = CountryCard("svk", "svk")
var svn = CountryCard("svn", "svn")
var swe = CountryCard("swe", "swe")
var tcd = CountryCard("tcd", "tcd")
var tgo = CountryCard("tgo", "tgo")
var tha = CountryCard("tha", "tha")
var tjk = CountryCard("tjk", "tjk")
var tkm = CountryCard("tkm", "tkm")
var tls = CountryCard("tls", "tls")
var tun = CountryCard("tun", "tun")
var tur = CountryCard("tur", "tur")
var tza = CountryCard("tza", "tza")
var ukr = CountryCard("ukr", "ukr")
var ury = CountryCard("ury", "ury")
var ven = CountryCard("ven", "ven")
var vnm = CountryCard("vnm", "vnm")
var yem = CountryCard("yem", "yem")
var zmb = CountryCard("zmb", "zmb")
var zwe = CountryCard("zwe", "zwe")

var arm_bol_gbr_ago = MapCard("arm", "bol", "gbr", "ago", "bol", "armbolgbrago")
var aze_bra_aut_ben = MapCard("aze", "bra", "aut", "ben", "bra", "azebraautben")
var bfa_blr_col_bgd = MapCard("bfa", "blr", "col", "bgd", "blr", "bfablrcolbgd")
var bwa_bel_bhr_chl = MapCard("bwa", "bel", "bhr", "chl", "bel", "bwabelbhrchl")
var caf_afg_alb_arg = MapCard("caf", "afg", "alb", "arg", "afg", "cafafgalbarg")
var che_tkm_tur_sur = MapCard("che", "tkm", "tur", "sur", "tkm", "chetkmtursur")
var cri_cmr_btn_bih = MapCard("cri", "cmr", "btn", "bih", "cmr", "cricmrbtnbih")
var sau_blz_deu_dza = MapCard("sau", "blz", "deu", "dza", "blz", "saublzdeudza")
var svn_tha_tcd_pry = MapCard("svn", "tha", "tcd", "pry", "tha", "svnthatcdpry")
var swe_tls_tgo_per = MapCard("swe", "tls", "tgo", "per", "tls", "swetlstgoper")
var tjk_pan_svk_tza = MapCard("tjk", "pan", "svk", "tza", "pan", "tjkpansvktza")
var ven_zwl_yem_ukr = MapCard("ven", "zwl", "yem", "ukr", "zwl", "venzwlyemukr")
var zmb_tur_ury_vnm = MapCard("zmb", "tur", "ury", "vnm", "tur", "zmbtururyvnm")


var flagcountrylist = listOf<FlagCard>(
    afg_col,
    arg_svk,
    arm_che,
    aut_tgo,
    aze_pry,
    bhr_tur,
    bra_tls,
    bwa_sur,
    caf_btn,
    cri_tun,
    pan_dza,
    per_sau,
    svn_ago,
    swe_ben,
    tcd_gbr,
    tha_bol,
    tjk_deu,
    tkm_bel,
    tza_blz,
    ukr_cmr,
    ury_blr,
    ven_bgd,
    vnm_bfa,
    yem_bih,
    zmb_chl,
    zwe_alb
)


val flagadapter = FlagAdapter(flagcountrylist, this)


var countryList = listOf<CountryCard>(
    afg,
    ago,
    alb,
    arg,
    arm,
    aut,
    aze,
    bel,
    bfa,
    bhr,
    bih,
    blz,
    blz,
    bol,
    bra,
    btn,
    bwa,
    caf,
    che,
    chl,
    cmr,
    col,
    cri,
    deu,
    gbr,
    pan,
    per,
    pry,
    sau,
    sur,
    svk,
    svn,
    swe,
    tcd,
    tgo,
    tha,
    tjk,
    tkm,
    tls,
    tun,
    tur,
    tza,
    ukr,
    ury,
    ven,
    vnm,
    yem,
    zmb,
    zwe
)
val countryadapter = CountryAdapter(countryList)


var mapcountrylist = listOf<MapCard>(
    arm_bol_gbr_ago,
    aze_bra_aut_ben,
    bfa_blr_col_bgd,
    bwa_bel_bhr_chl,
    caf_afg_alb_arg,
    che_tkm_tur_sur,
    cri_cmr_btn_bih,
    sau_blz_deu_dza,
    svn_tha_tcd_pry,
    swe_tls_tgo_per,
    tjk_pan_svk_tza,
    ven_zwl_yem_ukr,
    zmb_tur_ury_vnm
)
val mapadapter = MapAdapter(mapcountrylist)


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val flagsrecyclerView = findViewById<RecyclerView>(R.id.flagsRecyclerView)
    flagsrecyclerView.layoutManager = LinearLayoutManager(this, RecyclerView.HORIZONTAL, false)
    flagsrecyclerView.adapter = flagadapter


    val countryrecyclerView = findViewById<RecyclerView>(R.id.countriesRecyclerView)
    countryrecyclerView.layoutManager = LinearLayoutManager(this, RecyclerView.HORIZONTAL, false)
    countryrecyclerView.adapter = countryadapter


    val maprecyclerView = findViewById<RecyclerView>(R.id.mapsRecyclerView)
    maprecyclerView.layoutManager = LinearLayoutManager(this, RecyclerView.HORIZONTAL, false)
    maprecyclerView.adapter = mapadapter

}

  fun rotateFlagCard (flagCard: FlagCard, position: Int) : FlagCard {

    var flagtrigramuplist: List<String> = flagcountrylist.map{it.flagtrigramup }
    var iflagtrigramup : String = flagtrigramuplist[position]

    var flagimagelist = flagcountrylist.map{it.flagimage}
    var iflagimage = flagimagelist[position]
    var flagsouthlist = flagcountrylist.map { it.flagsouth }
    var iflagsouth = flagsouthlist[position]
    var rotationpossiblelist : List<Boolean> = flagcountrylist.map{ it.rotationpossible }
    var irotationpossible = rotationpossiblelist[position]
    var iflagimageView = findViewById<ImageView>(R.id.flagcountry)

    when (position) {
        0 ->  iflagimageView.setImageResource(R.drawable.afgcol)
        1 ->  iflagimageView.setImageResource(R.drawable.argsvk)
        2 -> iflagimageView.setImageResource(R.drawable.armche)
        3 ->  iflagimageView.setImageResource(R.drawable.auttgo)
        4 -> iflagimageView.setImageResource(R.drawable.azepry)
        5 ->  iflagimageView.setImageResource(R.drawable.bhrtur)
        6 ->  iflagimageView.setImageResource(R.drawable.bratls)
        7 ->  iflagimageView.setImageResource(R.drawable.bwasur)
        8 ->  iflagimageView.setImageResource(R.drawable.cafbtn)
        9 ->  iflagimageView.setImageResource(R.drawable.critun)
        10 ->  iflagimageView.setImageResource(R.drawable.pandza)
        11 ->  iflagimageView.setImageResource(R.drawable.persau)
        12 ->  iflagimageView.setImageResource(R.drawable.svnago)
        13 ->  iflagimageView.setImageResource(R.drawable.sweben)
        14 ->  iflagimageView.setImageResource(R.drawable.tcdgbr)
        15 ->  iflagimageView.setImageResource(R.drawable.thabol)
        16 ->  iflagimageView.setImageResource(R.drawable.tjkdeu)
        17 ->  iflagimageView.setImageResource(R.drawable.tkmbel)
        18 ->  iflagimageView.setImageResource(R.drawable.tzablz)
        19 ->  iflagimageView.setImageResource(R.drawable.ukrcmr)
        20 ->  iflagimageView.setImageResource(R.drawable.uryblr)
        21 ->  iflagimageView.setImageResource(R.drawable.venbgd)
        22 ->  iflagimageView.setImageResource(R.drawable.vnmbfa)
        23 ->  iflagimageView.setImageResource(R.drawable.yembih)
        24 ->  iflagimageView.setImageResource(R.drawable.zmbchl)
        25 ->  iflagimageView.setImageResource(R.drawable.zwealb)
        else -> throw AssertionError()
    }

    if (irotationpossible)
        {
        iflagimageView.animate().apply {
            rotationBy(180f)
            duration = 1000L
            start()
          // permutation of values north south
            var flagtrigramdownlist :List<String> = flagcountrylist.map{it.flagtrigramdown}
            var iflagtrigramdown : String = flagtrigramdownlist[position]
        var flagtempup: String = iflagtrigramup
            var flagtempdown: String = iflagtrigramdown
        iflagtrigramup = iflagsouth
        //flagtempdown = flagtempup
            iflagtrigramdown = flagtempup

        var iflagCard = FlagCard( iflagtrigramup, iflagtrigramdown, iflagimage, iflagsouth, irotationpossible )
            return iflagCard
        }
    } else {
        return flagCard
        //Toast.makeText(this, "flag already matched country", Toast.LENGTH_LONG).show()
    }
}


    override fun onClick(flagcardView: View) {
    if (flagcardView.tag != null) {
        val index = flagcardView.tag as Int
        var flagsouthList: List<String> = flagcountrylist.map{it.flagsouth }
        val flags = flagsouthList[index]
        Toast.makeText(this, "country : ${flags}", Toast.LENGTH_LONG).show()
        var flagcard:FlagCard = flagcountrylist[index]
        rotateFlagCard (flagcard, index)

    }
   }

   }

1 Ответ

0 голосов
/ 11 апреля 2019

Похоже, никого не интересует, что можно делать с RecyclerViews ...

У меня все еще проблема в том, что при нажатии на imageView, это тот, который слева, который суммирует! я не могу понять, что происходит, проверка в отладчике показывает, что переменные в порядке, idex это позиция и не меняются ...

Я пытался применить функцию поворота к cardView, тот же результат!

Я изменил код в функции и заменил flagCard на iflagCard, если было выполнено вращение (потому что два флага, один вверх, один вниз и, конечно же, FlagCard разные ...)

Вот новый код:

if (irotationpossible)
    {
        iflagcardView.animate().apply {
            rotationBy(180f)
            duration = 1000L
            start()
            // permutation of values north south
            var flagtrigramdownlist :List<String> = flagcountrylist.map{it.flagtrigramdown}
            var iflagtrigramdown : String = flagtrigramdownlist[position]
            var flagtempup: String = iflagtrigramup
            var flagtempdown: String = iflagtrigramdown
            iflagtrigramup = iflagsouth
            iflagsouth = flagtempup
            iflagtrigramdown = flagtempup

            var iflagCard = FlagCard( iflagtrigramup, iflagtrigramdown, iflagimage, iflagsouth, irotationpossible )
            //flagcountrylist.toSet(position, iflagCard)
            //abstract operator fun set(position: Int, iflagCard: FlagCard): FlagCard
            flagcountrylist.removeAt(position)
            flagcountrylist.add(position, iflagCard)
            return iflagCard
        }
    } else {
        return flagCard
        //Toast.makeText(this, "flag already matched country", Toast.LENGTH_LONG).show()
    }

мой вопрос теперь о функции set для mutableListOf в Kotlin: я пытался использовать "абстрактный набор развлечений оператора (индекс: Int, элемент: E): E" но не смог построить из-за абстрактного!

Есть ли другой способ, кроме моего решения, удалить и добавить по тому же индексу?

Есть ли опытный разработчик, любопытный на предмет странного вращения в этом приложении? https://www.youtube.com/watch?v=d9o7fttLBxk

Почему не изображение с правильным индексом?

...