自定义相册时候的复选框☑️问题。

我的相册里是一个recycleView所以操作起来也很方便,我这里直接就粘贴条目布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:scaleType="centerCrop"
        android:layout_marginTop="30dp"
        android:layout_centerInParent="true"
        android:id="@+id/imagg"
        android:src="@mipmap/ic_launcher"
        android:layout_width="180dp"
        android:layout_height="180dp" />

    <CheckBox
        android:id="@+id/check_pic"
        android:button="@null"
        android:background="@drawable/chexpic"
        android:layout_alignRight="@+id/imagg"
        android:layout_marginRight="8dp"
        android:layout_marginTop="22dp"
        android:layout_width="30dp"
        android:layout_height="30dp" />
</RelativeLayout>

很重要的一点是,为了避免删除条目的时候checkbox不被复用,初始化的时候做一下操作

checkStates = new SparseArray<>();
for (int i = 0; i < mlist.size(); i++) {
    checkStates.put(i, false);
}

在点击删除的操作的时候

//点击删除图片
btn_delet.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        for (int i = 0; i < checkStates.size() ; i++) {
            if (checkStates.valueAt(i)){
                checkStates.delete(checkStates.keyAt(i));
                i -- ;
            }
        }
        if (delectOnclick != null){
            delectOnclick.setDelectclcik(mllists,fl_delect);
        }
        recycleAdapter.notifyDataSetChanged();
    }
});

然后在adapter中进行设置【记住这里面的条目个数必须用传过来的记录chex的集合】

@Override
public int getItemCount() {
    return cheStatues.size();
}

然后在onBindViewHolder中加入

holder.check_pic.setChecked(cheStatues.valueAt(position));

然后设置监听

holder.check_pic.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        boolean isChecked;
        if (holder.check_pic.isChecked()){
            checked(BitmapFactory.decodeFile(alist.get(position)),position);
            isChecked = true;
        }else {
            cancleChecked(BitmapFactory.decodeFile(alist.get(position)),position,holder.check_pic);
            isChecked = false;
        }
        cheStatues.setValueAt(position, isChecked);
    }
});

然后点击删除

//点击删除
context.setDelectOnclick(new XiangCe.DelectOnclick() {
    @Override
    public void setDelectclcik(List<String> mllits,FrameLayout fl_delect) {
        //删除选择的sd卡中的图片
        delectpic(mllits);
        llist.clear();
            for (int i = 0; i < mllits.size(); i++) {
                alist.remove(Integer.parseInt(mllits.get(i)));
            }
            mllits.clear();
            fl_delect.setVisibility(View.GONE);
            notifyDataSetChanged();
        }
});

ok完美。

强调一下,必须用setOnClickListener,不要用 setOnCheckedChangeListener。因为button中的setCheck方法会默认调用setOnCheckedChangeListener,所以我们在这里做操作会出现问题,所以有俩种方式解决。

第一种:

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

//当按钮被按下时会触发此listener if(!buttonView.isPressed())

return;

}

第二种:

就是我们程序中的点击事件setOnClickListener。

欢迎来吐槽交流?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
CSS自定义复选框是一种使用CSS样式来自定义HTML复选框的方法。通过使用一些CSS属性和伪类选择器,我们可以改变复选框的外观和行为。 首先,我们可以使用checkbox标签来创建一个复选框。然后,通过设置display属性为none,我们可以隐藏原始的复选框,以便自定义其外观。 接下来,我们可以使用label标签来创建一个自定义复选框图标。通过设置label的display属性为inline-block,并且设置其宽度、高度、背景颜色等属性,我们可以定义复选框的外观。 要实现当复选框被选中时的效果,我们可以使用:checked伪类选择器。通过设置:checked伪类选择器下的label的背景颜色或其他属性,我们可以改变复选框被选中时的样式。 除了基本的样式外,我们还可以使用伪元素选择器,如:before和:after来创建复选框的勾选图标。通过设置这些伪元素选择器的内容、位置和样式,我们可以定义复选框被选中时的勾选图标。 最后,我们可以通过使用CSS动画和过渡属性,为复选框添加动态效果。例如,通过设置复选框的过渡属性和:hover伪类选择器下的样式,我们可以在鼠标悬停时为复选框添加过渡效果。 总的来说,CSS自定义复选框可以帮助我们实现更加个性化和美观的复选框样式。通过使用一些CSS属性、伪类选择器和伪元素选择器,我们可以根据需求自定义复选框的外观和行为,并通过动画和过渡属性为其添加动态效果。这为我们提供了更大的设计自由度和灵活性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值