我有一个包含照片的RecyclerView,我希望在点击照片时,它会有完全不透明度,而所有其他视图都有0.5f不透明度。
我尝试了很多不同的方法,但由于同样的原因,没有人能够幸存下来。这是一个简单尝试的例子,无论如何都不会很好地完成任务(因为它当时只处理2个视图)但是会很好地解释我正面临的问题:
fun changeRecyclerViewOpacity(currentPosition : Int){
val clickedView = myLayoutManager.findViewByPosition(currentPosition)
val previouslyClickedView = myLayoutManager.findViewByPosition(lastPosition)
clickedView!!.alpha = 1f
previouslyClickedView!!.alpha = 0.5f
lastPosition = currentPosition
}
我面临的问题以及我尝试的其他方法是,如果(例如)屏幕一次保存3个图像,而我的lastPosition为2且currentPosition为10,则应用程序崩溃,因为layoutManager没有t具有属于屏幕上的lastPosition的视图,因此无法执行该命令。如果我不这样做,当使用滚动到该视图时,它仍将具有1.0f的alpha。
如果有一种完全不同的方法可以采取,我很乐意听到它。我想要的只是点击的图像具有完全不透明度,而其他所有图像都是0.5f。
您可以在适配器类中尝试这样的事情:
var selectedPosition = 0 // You have to set this globally in the Adapter class
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = items.get(position)
// Update alpha
var alpha: Float = 0.5f
if(selectedPosition == position) {
alpha = 1.0f
}
holder.itemView!!.alpha = alpha
}
class ViewHolder:RecyclerView.ViewHolder,View.OnClickListener {
public ViewHolder(itemView: View) {
super(itemView);
itemView.setOnClickListener(this);
}
override
public fun onClick(v: View) {
// Below line is just like a safety check, because sometimes holder could be null,
// in that case, getAdapterPosition() will return RecyclerView.NO_POSITION
if (getAdapterPosition() == RecyclerView.NO_POSITION) return
// Updating old as well as new positions
notifyItemChanged(selectedPosition)
selectedPosition = getAdapterPosition()
// Do your another stuff for your onClick
}
}
如果这有帮助,请告诉我!