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);
}
}