我正在使用this类在ImageView上绘制TriangleShapeView,它会在用户单击事件时更改其颜色和可绘制的图像。
在RecyclerView onBindViewHolder方法中,我检查了feedModel.isSubscribed()
然后相应地设置TriangleShapeView颜色和可绘制图像:
public void onBindViewHolder(FeedViewHolder holder, final int position) {
final FeedModel feedModel =this.feedCollection.get(position);
if (feedModel.isSubscribed()) {
holder.mTrView.setBackgroundColor(Color.RED);
holder.mTrView.setDrawable(holder.mTrView.getContext().getResources().getDrawable(R.drawable.ic_check));
} else {
holder.mTrView.setBackgroundColor(Color.BLACK);
holder.mTrView.setDrawable(holder.mTrView.getContext().getResources().getDrawable(R.drawable.ic_plus));
}
在setOnClickListener中:
holder.itemView.setOnClickListener(v -> {
if (FeedAdapter.this.onItemClieckListener != null){
FeedAdapter.this.onItemClieckListener.onFeedItemClicked(feedModel);
if (feedModel.isSubscribed()) {
feedModel.setIsSubscribed(false);
notifyItemChanged(position);
} else {
feedModel.setIsSubscribed(true);
notifyItemChanged(position);
}
}
});
第一次加载商品时,但当用户单击时,此方法运行良好:
-第1次和第2次:可绘制的图像根据需要进行了更改,但是颜色
保持不变。
-第三次可绘制的图像和颜色均发生变化
我正在使用以下xml布局来填充此自定义视图:
<cardView
<RelativeLayout
....
<com.xxx.TriangleShapeView
android:id="@+id/trView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:elevation="15dp"
TriangleShapeView:imgPadding="5dp"
TriangleShapeView:triangleBackground="@color/cardview_dark_background"
TriangleShapeView:img="@drawable/ic_plus"/>
我相信,一旦调用OnClick并在onBindViewHoldr方法中进行检查就可以了,FeedModel将得到更新。所以我认为问题出在上面链接中提到的课程中
我希望实现的是:
如果feedModel.isSubscribescribe,则将颜色更改为红色,并将可绘制的颜色更改为选中标志图标。否则,请保持初始值与布局xml中的相同。
也对onClick做出反应并更改颜色和图像
最佳答案
我认为您是对的,但此方法存在错误。
public void setBackgroundColor(int backgroundColor) {
this.backgroundColor = backgroundColor;
invalidate();
}
在构造函数和onDraw方法中分配绘画颜色。
尝试在
invalidate()
与paint.setColor(backgroundColor);
行之前添加到此方法