android实现截图并动画消失

android实现截图并动画消失,第1张

概述整体思路1、获取要截图的view2、根据这个view创建Bitmap3、保存图片,拿到图片路径4、把图片路径传入自定义view(自定义view实现的功能:画圆角边框,动画缩小至消失)主要用到的是ObjectAnimator属性动画的缩小和平移核心代码得到图片的路径privateStringgetFilePath(



整体思路

1、获取要截图的vIEw
2、根据这个vIEw创建Bitmap
3、保存图片,拿到图片路径
4、把图片路径传入自定义view(自定义view实现的功能:画圆角边框,动画缩小至消失)
主要用到的是ObjectAnimator属性动画的缩小和平移

核心代码

得到图片的路径

private String  getfilePath() {        Bitmap bitmap = createVIEwBitmap(picimg);        if (bitmap != null) {            try {                // 首先保存图片                String storePath = Environment.getExternalStorageDirectory().getabsolutePath() + file.separator + "HIS";                file appDir = new file(storePath);                if (!appDir.exists()) {                    appDir.mkdir();                }                String filename = System.currentTimeMillis() + ".jpg";                file file = new file(appDir, filename);                bufferedoutputstream bos = new bufferedoutputstream(new fileOutputStream(file));                bitmap.compress(Bitmap.CompressFormat.JPEG, 80, bos);                bos.flush();                bos.close();                Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_file);                Uri uri = Uri.fromfile(file);                intent.setData(uri);                sendbroadcast(intent);                return file.getabsolutePath();            } catch (Exception e) {                return null;            }        } else {            return null;        }    }public Bitmap createVIEwBitmap(VIEw v) {        Bitmap bitmap = Bitmap.createBitmap(v.getWIDth(), v.getHeight(), Bitmap.Config.ARGB_8888);        Canvas canvas = new Canvas(bitmap);        v.draw(canvas);        return bitmap;    }

把图片路径传入自定义view

 String filePath = getfilePath();        mdisplayScreenshotSnv.setVisibility(VIEw.GONE);        mdisplayScreenshotSnv.setPath(filePath, picimg.getMeasureDWIDth(), picimg.getMeasuredHeight(), true);        mdisplayScreenshotSnv.setVisibility(VIEw.VISIBLE);

截图实现圆角边框和动画消失

//实现截图动画(添加圆角边框)                GlIDe.with(getContext())                        .load(new file(path))                        .transform(new CenterCrop(getContext()), new GlIDeRoundtransform(getContext(), radius))                        .crossFade()                        .Listener(new RequestListener<file, GlIDeDrawable>() {                            @OverrIDe                            public boolean onException(Exception e, file model, Target<GlIDeDrawable> target, boolean isFirstResource) {                                if (anim) {                                    anim(thumb, true);                                }                                return false;                            }                            @OverrIDe                            public boolean onResourceReady(GlIDeDrawable resource, file model, Target<GlIDeDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {                                if (thumb.getDrawable() == null) {                                    // 避免截图成功时出现短暂的全屏白色背景                                    thumb.setimageDrawable(resource);                                }                                if (anim) {                                    anim(thumb, true);                                }                                return false;                            }                        }).into(thumb);                //启动延时关闭截图(显示5秒消失截图)                startTick(true);

动画设置

/**     * 动画设置     * @param vIEw     * @param start     */    private voID anim(final ImageVIEw vIEw, boolean start) {        if (!start) {            if (getChildCount() > 0) {                // 快速点击截图时,上一次添加的子视图尚未移除,需重置视图                resetVIEw();            }            setScaleX(1f);            setScaleY(1f);            setTranslationX(0f);            setTranslationY(0f);            clearanimation();            if (mScaleXAnim != null) {                mScaleXAnim.cancel();                mScaleXAnim = null;            }            if (mScaleYAnim != null) {                mScaleYAnim.cancel();                mScaleYAnim = null;            }            if (mTranslationXAnim != null) {                mTranslationXAnim.cancel();                mTranslationXAnim = null;            }            if (mTranslationYAnim != null) {                mTranslationYAnim.cancel();                mTranslationYAnim = null;            }            return;        }        vIEw.post(new Runnable() {            @OverrIDe            public voID run() {                if (!vIEw.isAttachedToWindow()) {                    // 子视图已被移除                    return;                }                setCardBackgroundcolor(color.WHITE);                //等待cross fade动画                float margins = displayUtil.dip2px(getContext(), 10);                float scaletoX = (float) mFinalW / getMeasureDWIDth();                float scaletoY = (float) mFinalH / getMeasuredHeight();                float translatetoX = -(getMeasureDWIDth() / 2f - (mFinalW / 2 + margins));                float translatetoY = getMeasuredHeight() / 2f - (mFinalH / 2f + margins);                //以当前vIEw为中心,x轴右为正,左为负;y轴下为正,上为负                mScaleXAnim = ObjectAnimator.offloat(ScreenshotNotifyVIEw.this, "scaleX", 1.0f, scaletoX);                mScaleYAnim = ObjectAnimator.offloat(ScreenshotNotifyVIEw.this, "scaleY", 1.0f, scaletoY);                mTranslationXAnim = ObjectAnimator.offloat(ScreenshotNotifyVIEw.this, "translationX", 1.0f, translatetoX);                mTranslationYAnim = ObjectAnimator.offloat(ScreenshotNotifyVIEw.this, "translationY", 1.0f, translatetoY);                //设置速度                mScaleXAnim.setDuration(500);                mScaleYAnim.setDuration(500);                mTranslationXAnim.setDuration(500);                mTranslationYAnim.setDuration(500);                //缩放                mScaleXAnim.start();                mScaleYAnim.start();                //平移                mTranslationXAnim.start();                mTranslationYAnim.start();                setEnabled(false);                mScaleXAnim.addListener(new AnimatorListenerAdapter() {                    @OverrIDe                    public voID onAnimationCancel(Animator animation) {                        super.onAnimationCancel(animation);                        setEnabled(true);                    }                    @OverrIDe                    public voID onAnimationEnd(Animator animation) {                        super.onAnimationEnd(animation);                        setEnabled(true);                        setClickable(true);                    }                    @OverrIDe                    public voID onAnimationStart(Animator animation) {                        super.onAnimationStart(animation);                    }                });            }        });    }
完整代码

ScreenshotNotifyVIEw.java

package com.lyw.myproject.Widget;import androID.animation.Animator;import androID.animation.AnimatorListenerAdapter;import androID.animation.ObjectAnimator;import androID.content.Context;import androID.graphics.color;import androID.os.Handler;import androID.os.Looper;import androID.util.AttributeSet;import androID.vIEw.Gravity;import androID.Widget.FrameLayout;import androID.Widget.ImageVIEw;import com.bumptech.glIDe.GlIDe;import com.bumptech.glIDe.load.resource.bitmap.CenterCrop;import com.bumptech.glIDe.load.resource.drawable.GlIDeDrawable;import com.bumptech.glIDe.request.RequestListener;import com.bumptech.glIDe.request.target.Target;import com.lyw.myproject.screenshot.GlIDeRoundtransform;import com.lyw.myproject.utils.displayUtil;import java.io.file;import androIDx.annotation.NonNull;import androIDx.annotation.Nullable;import androIDx.cardvIEw.Widget.CardVIEw;public class ScreenshotNotifyVIEw extends CardVIEw {    private int mFinalW;    private int mFinalH;    private Handler mHandler;    private ObjectAnimator mScaleXAnim = null;    private ObjectAnimator mScaleYAnim = null;    private ObjectAnimator mTranslationXAnim = null;    private ObjectAnimator mTranslationYAnim = null;    public ScreenshotNotifyVIEw(@NonNull Context context) {        super(context);        init(context);    }    public ScreenshotNotifyVIEw(@NonNull Context context, @Nullable AttributeSet attrs) {        super(context, attrs);        init(context);    }    public ScreenshotNotifyVIEw(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        init(context);    }    @OverrIDe    public voID setVisibility(int visibility) {        super.setVisibility(visibility);        if (visibility == GONE) {            resetVIEw();        }    }    @OverrIDe    protected voID onDetachedFromWindow() {        super.onDetachedFromWindow();        anim(null, false);        startTick(false);    }    private voID init(Context context) {        mHandler = new Handler(Looper.getMainLooper());        setCardElevation(0);    }    public voID setPath(final String path, int w, int h, final boolean anim) {        setClickable(false);        anim(null, false);        final ImageVIEw thumb = new ImageVIEw(getContext());        FrameLayout.LayoutParams thumbParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);        FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) getLayoutParams();        int padding = (int) displayUtil.dip2px(getContext(), 2);        int margins = (int) displayUtil.dip2px(getContext(), 8);        //设置截图之后的宽度,高度按照比例设置        mFinalW = (int) displayUtil.dip2px(getContext(), 90);        mFinalH = (int) ((float) mFinalW * h) / w;        if (!anim) {            //设置边框            params.setmargins(margins, margins, margins, margins);            margins = (int) displayUtil.dip2px(getContext(), 2);            params.wIDth = mFinalW + margins * 2;            params.height = mFinalH + margins * 2;            params.gravity = Gravity.START | Gravity.BottOM;            thumbParams.wIDth = mFinalW;            thumbParams.height = mFinalH;            thumbParams.gravity = Gravity.CENTER;            setLayoutParams(params);            requestLayout();        } else {            //设置边框            thumbParams.setmargins(margins, margins, margins, margins);            params.setmargins(0, 0, 0, 0);            params.wIDth = FrameLayout.LayoutParams.MATCH_PARENT;            params.height = FrameLayout.LayoutParams.MATCH_PARENT;            setLayoutParams(params);            requestLayout();        }        thumb.setScaleType(ImageVIEw.ScaleType.FIT_XY);        thumb.setLayoutParams(thumbParams);        addVIEw(thumb);        post(new Runnable() {            @OverrIDe            public voID run() {                float scale = (float) mFinalW / getMeasureDWIDth();                int radius = 5;                if (anim) {                    radius = (int) (5f / scale);                }                seTradius((int) displayUtil.dip2px(getContext(), radius));                //显示截图(添加圆角)                GlIDe.with(getContext())                        .load(new file(path))                        .transform(new CenterCrop(getContext()), new GlIDeRoundtransform(getContext(), radius))                        .crossFade()                        .Listener(new RequestListener<file, GlIDeDrawable>() {                            @OverrIDe                            public boolean onException(Exception e, file model, Target<GlIDeDrawable> target, boolean isFirstResource) {                                if (anim) {                                    anim(thumb, true);                                }                                return false;                            }                            @OverrIDe                            public boolean onResourceReady(GlIDeDrawable resource, file model, Target<GlIDeDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {                                if (thumb.getDrawable() == null) {                                    // 避免截图成功时出现短暂的全屏白色背景                                    thumb.setimageDrawable(resource);                                }                                if (anim) {                                    anim(thumb, true);                                }                                return false;                            }                        }).into(thumb);                //启动延时关闭截图(显示5秒消失截图)                startTick(true);            }        });    }    /**     * 动画设置     * @param vIEw     * @param start     */    private voID anim(final ImageVIEw vIEw, boolean start) {        if (!start) {            if (getChildCount() > 0) {                // 快速点击截图时,上一次添加的子视图尚未移除,需重置视图                resetVIEw();            }            setScaleX(1f);            setScaleY(1f);            setTranslationX(0f);            setTranslationY(0f);            clearanimation();            if (mScaleXAnim != null) {                mScaleXAnim.cancel();                mScaleXAnim = null;            }            if (mScaleYAnim != null) {                mScaleYAnim.cancel();                mScaleYAnim = null;            }            if (mTranslationXAnim != null) {                mTranslationXAnim.cancel();                mTranslationXAnim = null;            }            if (mTranslationYAnim != null) {                mTranslationYAnim.cancel();                mTranslationYAnim = null;            }            return;        }        vIEw.post(new Runnable() {            @OverrIDe            public voID run() {                if (!vIEw.isAttachedToWindow()) {                    // 子视图已被移除                    return;                }                setCardBackgroundcolor(color.WHITE);                //等待cross fade动画                float margins = displayUtil.dip2px(getContext(), 10);                float scaletoX = (float) mFinalW / getMeasureDWIDth();                float scaletoY = (float) mFinalH / getMeasuredHeight();                float translatetoX = -(getMeasureDWIDth() / 2f - (mFinalW / 2 + margins));                float translatetoY = getMeasuredHeight() / 2f - (mFinalH / 2f + margins);                //以当前vIEw为中心,x轴右为正,左为负;y轴下为正,上为负                mScaleXAnim = ObjectAnimator.offloat(ScreenshotNotifyVIEw.this, "scaleX", 1.0f, scaletoX);                mScaleYAnim = ObjectAnimator.offloat(ScreenshotNotifyVIEw.this, "scaleY", 1.0f, scaletoY);                mTranslationXAnim = ObjectAnimator.offloat(ScreenshotNotifyVIEw.this, "translationX", 1.0f, translatetoX);                mTranslationYAnim = ObjectAnimator.offloat(ScreenshotNotifyVIEw.this, "translationY", 1.0f, translatetoY);                //设置速度                mScaleXAnim.setDuration(500);                mScaleYAnim.setDuration(500);                mTranslationXAnim.setDuration(500);                mTranslationYAnim.setDuration(500);                //缩放                mScaleXAnim.start();                mScaleYAnim.start();                //平移                mTranslationXAnim.start();                mTranslationYAnim.start();                setEnabled(false);                mScaleXAnim.addListener(new AnimatorListenerAdapter() {                    @OverrIDe                    public voID onAnimationCancel(Animator animation) {                        super.onAnimationCancel(animation);                        setEnabled(true);                    }                    @OverrIDe                    public voID onAnimationEnd(Animator animation) {                        super.onAnimationEnd(animation);                        setEnabled(true);                        setClickable(true);                    }                    @OverrIDe                    public voID onAnimationStart(Animator animation) {                        super.onAnimationStart(animation);                    }                });            }        });    }    private voID resetVIEw() {        setCardBackgroundcolor(color.transparent);        removeAllVIEws();        startTick(false);    }    private voID startTick(boolean start) {        if (!start) {            mHandler.removeCallbacksAndMessages(null);            return;        }        mHandler.postDelayed(new Runnable() {            @OverrIDe            public voID run() {                setVisibility(GONE);            }        }, 5 * 1000);    }}

GlIDeRoundtransform.java

package com.lyw.myproject.screenshot;import androID.content.Context;import androID.content.res.Resources;import androID.graphics.Bitmap;import androID.graphics.BitmapShader;import androID.graphics.Canvas;import androID.graphics.Paint;import androID.graphics.RectF;import com.bumptech.glIDe.load.engine.bitmap_recycle.BitmapPool;import com.bumptech.glIDe.load.resource.bitmap.Bitmaptransformation;/** * Created on 2018/12/26. * * @author lyw **/public class GlIDeRoundtransform extends Bitmaptransformation {    private static float radius = 0f;    /**     * 构造函数 默认圆角半径 4dp     *     * @param context Context     */    public GlIDeRoundtransform(Context context) {        this(context, 4);    }    /**     * 构造函数     *     * @param context Context     * @param dp 圆角半径     */    public GlIDeRoundtransform(Context context, int dp) {        super(context);        radius = Resources.getSystem().getdisplayMetrics().density * dp;    }    @OverrIDe    protected Bitmap transform(BitmapPool pool, Bitmap totransform, int outWIDth, int outHeight) {        return roundCrop(pool, totransform);    }    private static Bitmap roundCrop(BitmapPool pool, Bitmap source) {        if (source == null)  {            return null;        }        Bitmap result = pool.get(source.getWIDth(), source.getHeight(), Bitmap.Config.ARGB_8888);        if (result == null) {            result = Bitmap.createBitmap(source.getWIDth(), source.getHeight(), Bitmap.Config.ARGB_8888);        }        Canvas canvas = new Canvas(result);        Paint paint = new Paint();        paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));        paint.setAntiAlias(true);        RectF rectF = new RectF(0f, 0f, source.getWIDth(), source.getHeight());        canvas.drawRoundRect(rectF, radius, radius, paint);        return result;    }    @OverrIDe    public String getID() {        return getClass().getname() + Math.round(radius);    }}

activity_screen_shot1.xml

<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent"    androID:orIEntation="vertical">    <FrameLayout        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content">        <ImageVIEw            androID:ID="@+ID/pic_iv"            androID:layout_wIDth="match_parent"            androID:layout_height="wrap_content"            androID:scaleType="fitXY"            androID:src="@mipmap/picture" />        <com.lyw.myproject.Widget.ScreenshotNotifyVIEw            xmlns:app="http://schemas.androID.com/apk/res-auto"            androID:ID="@+ID/display_screenshot_snv"            androID:layout_wIDth="match_parent"            androID:layout_height="match_parent"            androID:visibility="gone"            app:cardBackgroundcolor="@color/src_trans" />    </FrameLayout>    <button        androID:ID="@+ID/screen_btn"        androID:text="截图"        androID:layout_gravity="center"        androID:layout_margintop="20dp"        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"/></linearLayout>

ScreenShotActivity1.java

package com.lyw.myproject.screenshot;import androID.content.Intent;import androID.graphics.Bitmap;import androID.graphics.Canvas;import androID.net.Uri;import androID.os.Bundle;import androID.os.Environment;import androID.util.Log;import androID.vIEw.VIEw;import androID.vIEw.animation.Animation;import androID.vIEw.animation.AnimationUtils;import androID.Widget.button;import androID.Widget.ImageVIEw;import androID.Widget.Toast;import com.lyw.myproject.BaseActivity;import com.lyw.myproject.R;import com.lyw.myproject.utils.LoadingLayout;import com.lyw.myproject.utils.MemoryUtils;import com.lyw.myproject.utils.PermissionUtil;import com.lyw.myproject.Widget.ScreenshotNotifyVIEw;import java.io.bufferedoutputstream;import java.io.file;import java.io.fileOutputStream;import androIDx.annotation.Nullable;/** * 功能描述:截图 */public class ScreenShotActivity1 extends BaseActivity {    private ImageVIEw picimg;    private button screenBtn;    private ScreenshotNotifyVIEw mdisplayScreenshotSnv;    @OverrIDe    protected voID onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_screen_shot1);        initVIEw();        initEvent();    }    private voID initVIEw() {        picimg = (ImageVIEw) findVIEwByID(R.ID.pic_iv);        mdisplayScreenshotSnv = (ScreenshotNotifyVIEw) findVIEwByID(R.ID.display_screenshot_snv);        screenBtn = (button) findVIEwByID(R.ID.screen_btn);    }    private voID initEvent() {        screenBtn.setonClickListener(new VIEw.OnClickListener() {            @OverrIDe            public voID onClick(VIEw v) {                handleScreenShot();            }        });    }    /**     * 处理截屏的业务     */    private voID handleScreenShot() {        if (!PermissionUtil.isHasSDCarDWritePermission(this)) {            Toast.makeText(ScreenShotActivity1.this, "没有权限", Toast.LENGTH_SHORT).show();            PermissionUtil.requestSDCarDWrite(this);            return;        }        if (!MemoryUtils.hasEnoughMemory(MemoryUtils.MIN_MEMORY)) {            Toast.makeText(ScreenShotActivity1.this, "内存不足,截图失败", Toast.LENGTH_SHORT).show();            return;        }        String filePath = getfilePath();        mdisplayScreenshotSnv.setVisibility(VIEw.GONE);        mdisplayScreenshotSnv.setPath(filePath, picimg.getMeasureDWIDth(), picimg.getMeasuredHeight(), true);        mdisplayScreenshotSnv.setVisibility(VIEw.VISIBLE);    }    private String  getfilePath() {        Bitmap bitmap = createVIEwBitmap(picimg);        if (bitmap != null) {            try {                // 首先保存图片                String storePath = Environment.getExternalStorageDirectory().getabsolutePath() + file.separator + "HIS";                file appDir = new file(storePath);                if (!appDir.exists()) {                    appDir.mkdir();                }                String filename = System.currentTimeMillis() + ".jpg";                file file = new file(appDir, filename);                bufferedoutputstream bos = new bufferedoutputstream(new fileOutputStream(file));                bitmap.compress(Bitmap.CompressFormat.JPEG, 80, bos);                bos.flush();                bos.close();                Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_file);                Uri uri = Uri.fromfile(file);                intent.setData(uri);                sendbroadcast(intent);                return file.getabsolutePath();            } catch (Exception e) {                return null;            }        } else {            return null;        }    }    public Bitmap createVIEwBitmap(VIEw v) {        Bitmap bitmap = Bitmap.createBitmap(v.getWIDth(), v.getHeight(), Bitmap.Config.ARGB_8888);        Canvas canvas = new Canvas(bitmap);        v.draw(canvas);        return bitmap;    }}

PermissionUtil.java

package com.lyw.myproject.utils;import androID.Manifest;import androID.app.Activity;import androID.content.Context;import androID.content.pm.PackageManager;import androID.os.Build;import androIDx.core.app.ActivityCompat;public class PermissionUtil {    /**     * 请求地理位置     *     * @param context     */    public static voID requestLocationPermission(Context context) {        if (Build.VERSION.SDK_INT >= 23) {            if (!isHasLocationPermission(context)) {                ActivityCompat.requestPermissions((Activity) context, PermissionManager.PERMISSION_LOCATION, PermissionManager.REQUEST_LOCATION);            }        }    }    /**     * 判断是否有地理位置     *     * @param context     * @return     */    public static boolean isHasLocationPermission(Context context) {        return ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED;    }    /**     * 判断是否有文件读写的权限     *     * @param context     * @return     */    public static boolean isHasSDCarDWritePermission(Context context) {        return ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;    }    /**     * 文件权限读写     *     * @param context     */    public static voID requestSDCarDWrite(Context context) {        if (Build.VERSION.SDK_INT >= 23) {            if (!isHasSDCarDWritePermission(context)) {                ActivityCompat.requestPermissions((Activity) context, PermissionManager.PERMISSION_SD_WRITE, PermissionManager.REQUEST_SD_WRITE);            }        }    }}

MemoryUtils.java

package com.lyw.myproject.utils;import androID.util.Log;public class MemoryUtils {    public static final int MIN_MEMORY = 50 * 1024 * 1024;    /**     * 判断有没足够内存截图     *     * @param size     * @return     */    public static boolean hasEnoughMemory(int size) {        //最大内存        long maxMemory = Runtime.getRuntime().maxMemory();        //分配的可用内存        long freeMemory = Runtime.getRuntime().freeMemory();        //已用内存        long usedMemory = Runtime.getRuntime().totalMemory() - freeMemory;        //剩下可使用的内存        long canUseMemory = maxMemory - usedMemory;        Log.d("Memory", "hasEnoughMemory: " +            "maxMemory = " + maxMemory +            ", freeMemory = " + freeMemory +            ", usedMemory = " + usedMemory +            ", canUseMemory = " + canUseMemory);        if (canUseMemory >= size) {            return true;        }        return false;    }}
总结

以上是内存溢出为你收集整理的android实现截图并动画消失全部内容,希望文章能够帮你解决android实现截图并动画消失所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1058817.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存