Android FrameLayout帧布局

FrameLayout帧布局是可以覆盖的
布局之间可以覆盖的

 <FrameLayout
        android:layout_marginTop="12dp"
        android:layout_marginStart="12dp"
        android:layout_width="120dp"
        android:layout_height="160dp" >

        <androidx.appcompat.widget.AppCompatImageView
            android:id="@+id/iv_photo"
            android:adjustViewBounds="true"
            android:scaleType="centerCrop"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <androidx.appcompat.widget.AppCompatImageButton
            android:id="@+id/ib_add"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#EDEDED"
            android:src="@mipmap/ic_photo_add" />

        <androidx.appcompat.widget.AppCompatImageButton
            android:id="@+id/ib_delete"
            android:layout_width="30dp"
            android:layout_height="wrap_content"
            android:layout_gravity="end"
            android:adjustViewBounds="true"
            android:background="#60000000"
            android:padding="3dp"
            android:scaleType="fitXY"
            android:src="@mipmap/ic_delete_1"
            android:tint="@color/white" />

    </FrameLayout>

在这里插入图片描述
一个ImageButton覆盖在ImageView上面
然后在Java上面写逻辑
在这里插入图片描述

  if (mMediaImage != null) {//mMediaImage 是传进来的值,当有传到值进来的时候
            Glide.with(this).load(mMediaImage.getUri()).into(mIvPhoto);//图片显示出来
            mIbAdd.setVisibility(View.GONE);//图片添加按键消失
            mIbDelete.setVisibility(View.VISIBLE);//删除按键显示
        } else {//当没有传值进来时
            mIbAdd.setVisibility(View.VISIBLE);//图片添加按键显示,就覆盖imageview了
            mIbDelete.setVisibility(View.GONE);//删除按键消失
        }

在这里插入图片描述

 private void onDeletePhotoClick(View view) {//当点击删除按键的时候
        mMediaImage = null;//让数据为空
        Glide.with(mContext).load(new ColorDrawable(Color.TRANSPARENT)).into(mIvPhoto);//加载空白
        mIbAdd.setVisibility(View.VISIBLE);//添加按键显示
        mIbDelete.setVisibility(View.GONE);//删除按键消失
    }

在这里插入图片描述

   private void onAddPhotoClick(View view) {//当点击添加按键的时候
        new ChoiceGallery(this)//进入选择图库
                .setMaxChoice(1)
                .setShowCamera(true)
                .setOnMediaImageCallback(mediaImages -> {
                    mMediaImage = mediaImages.get(0);//进入图库选择图片
                    Glide.with(this).load(mMediaImage.getUri()).into(mIvPhoto);//然后回调数据在这里显示
                    mIbAdd.setVisibility(View.GONE);//图片显示后,添加按键就消失
                    mIbDelete.setVisibility(View.VISIBLE);//删除按键显示
                })
                .start();
    }

在这里插入图片描述

    private void onPhotoClick(View v) {//当点击图片的时候
        if (mMediaImage != null) {//数据不为空的时候
            PhotoReleasePreviewActivity.start(mContext, mMediaImage.getUri(), 0);//跳转到预览界面
        }
    }

全部代码如下

package com.meetdilse.store.ui.activity;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.github.gallery.ChoiceGallery;
import com.github.gallery.MediaImage;
import com.meetdilse.store.R;
import com.meetdilse.store.base.BaseActivity;
import com.meetdilse.store.data.PhotoPrice;
import com.meetdilse.store.evenbus.MyPhotoEvent;
import com.meetdilse.store.http.HttpUtil;
import com.meetdilse.store.http.OkHttp;
import com.meetdilse.store.http.UFileCatalog;
import com.meetdilse.store.interfaces.Action1;
import com.meetdilse.store.ui.dialog.PhotoPricePickerDialog;
import com.meetdilse.store.ui.dialog.ProgressDialog;
import com.meetdilse.store.utils.CastUtil;
import com.meetdilse.store.utils.ToastUtil;

import org.greenrobot.eventbus.EventBus;

import androidx.annotation.Nullable;
import androidx.appcompat.widget.SwitchCompat;

/**
 * Created by WangChunHao on 2022/02/09 18:17.
 * <p>
 * 上传图片界面
 */
public class PhotoReleaseActivity extends BaseActivity {

    private ProgressDialog mProgressDialog;
    private MediaImage mMediaImage;
    private PhotoPricePickerDialog mPhotoPricePickerDialog;
    private SwitchCompat switchPrivate;
    private TextView tvPrice;
    private ImageView mIvPhoto;
    private ImageButton mIbAdd, mIbDelete;
    //传图片进来

    public static void start(Context context, MediaImage mediaImage) {
        Intent starter = new Intent(context, PhotoReleaseActivity.class);
        starter.putExtra("path", mediaImage);
        context.startActivity(starter);
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_photo_release);

        Button btnPrice = findViewById(R.id.btn_price);
        switchPrivate = findViewById(R.id.swi_photo);
        tvPrice = findViewById(R.id.tv_price);
        mMediaImage = getIntent().getParcelableExtra("path");
        mIvPhoto = findViewById(R.id.iv_photo);
        mIbAdd = findViewById(R.id.ib_add);
        mIbDelete = findViewById(R.id.ib_delete);

        mIvPhoto.setOnClickListener(this::onPhotoClick);

        mIbAdd.setOnClickListener(this::onAddPhotoClick);

        mIbDelete.setOnClickListener(this::onDeletePhotoClick);

        if (mMediaImage != null) {
            Glide.with(this).load(mMediaImage.getUri()).into(mIvPhoto);
            mIbAdd.setVisibility(View.GONE);
            mIbDelete.setVisibility(View.VISIBLE);
        } else {
            mIbAdd.setVisibility(View.VISIBLE);
            mIbDelete.setVisibility(View.GONE);
        }

        //发布照片
        findViewById(R.id.btn_confirm).setOnClickListener(this::onPhotoReleaseClick);
        //设置价格
        btnPrice.setOnClickListener(this::selectPhotoPrice);
        //设置私密
        switchPrivate.setOnCheckedChangeListener((buttonView, isChecked) -> {
            if (isChecked) {
                if (tvPrice.length() == 0) {
                    btnPrice.performClick();//模拟btnprice控件点击
                }
            } else {
                tvPrice.setText(null);
            }
        });
    }

    private void onPhotoClick(View v) {
        if (mMediaImage != null) {
            PhotoReleasePreviewActivity.start(mContext, mMediaImage.getUri(), 0);
        }
    }

    private void onAddPhotoClick(View view) {
        new ChoiceGallery(this)
                .setMaxChoice(1)
                .setShowCamera(true)
                .setOnMediaImageCallback(mediaImages -> {
                    mMediaImage = mediaImages.get(0);
                    Glide.with(this).load(mMediaImage.getUri()).into(mIvPhoto);
                    mIbAdd.setVisibility(View.GONE);
                    mIbDelete.setVisibility(View.VISIBLE);
                })
                .start();
    }

    private void onDeletePhotoClick(View view) {
        mMediaImage = null;
        Glide.with(mContext).load(new ColorDrawable(Color.TRANSPARENT)).into(mIvPhoto);
        mIbAdd.setVisibility(View.VISIBLE);
        mIbDelete.setVisibility(View.GONE);
    }

    /**
     * 图片发布
     */
    private void onPhotoReleaseClick(View view) {

        mProgressDialog = new ProgressDialog(this);
        mProgressDialog.show();

        HttpUtil.uploadPhoto(this, UFileCatalog.IMAGE_PHOTO, mMediaImage.getUri(), (success, path) -> {
            if (success) {
                releaseRequest(path);
            } else {
                ToastUtil.out(R.string.load_error);
                mProgressDialog.dismiss();
            }
        });
    }

    /**
     * 发布请求
     */
    private void releaseRequest(String thumb) {
        int isPrivate = switchPrivate.isChecked() ? 1 : 0;//判断是否有点击
        int coin = CastUtil.parseInt(tvPrice.getText().toString().trim());//获取控件上的数据然后强转
        OkHttp.create(this).postPhoto(String.valueOf(thumb), isPrivate, coin).enqueue((call, httpRes) -> {
            ToastUtil.out(httpRes.getMsg());
            mProgressDialog.dismiss();
            if (httpRes.isSuccessful()) {
                EventBus.getDefault().post(new MyPhotoEvent(MyPhotoEvent.ACTION_THUMB));
                finish();
            }
        });
    }

    /**
     * 获取图片价格列表
     */
    private void selectPhotoPrice(View view) {//点击事件后,拉起弹窗,设置回调
        if (mPhotoPricePickerDialog == null) {//做全局变量防止重复创建对象,如果為空时才初始化对象
            mPhotoPricePickerDialog = new PhotoPricePickerDialog()
                    .setCallback(new Action1<PhotoPrice.Fee>() {
                        @Override
                        public void onAction(PhotoPrice.Fee fee) {
                            tvPrice.setText(String.valueOf(fee.getCoin()));
                            switchPrivate.setChecked(true);
                        }
                    });
        }
        mPhotoPricePickerDialog.show(this);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值