整体思路

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>() {@Overridepublic boolean onException(Exception e, File model, Target<GlideDrawable> target, boolean isFirstResource) {if (anim) {anim(thumb, true);}return false;}@Overridepublic 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() {@Overridepublic 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() {@Overridepublic void onAnimationCancel(Animator animation) {super.onAnimationCancel(animation);setEnabled(true);}@Overridepublic void onAnimationEnd(Animator animation) {super.onAnimationEnd(animation);setEnabled(true);setClickable(true);}@Overridepublic 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);}@Overridepublic void setVisibility(int visibility) {super.setVisibility(visibility);if (visibility == GONE) {resetView();}}@Overrideprotected 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() {@Overridepublic 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>() {@Overridepublic boolean onException(Exception e, File model, Target<GlideDrawable> target, boolean isFirstResource) {if (anim) {anim(thumb, true);}return false;}@Overridepublic 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() {@Overridepublic 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() {@Overridepublic void onAnimationCancel(Animator animation) {super.onAnimationCancel(animation);setEnabled(true);}@Overridepublic void onAnimationEnd(Animator animation) {super.onAnimationEnd(animation);setEnabled(true);setClickable(true);}@Overridepublic 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() {@Overridepublic 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;}@Overrideprotected 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;}@Overridepublic 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"><FrameLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><ImageViewandroid: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.ScreenshotNotifyViewxmlns: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><Buttonandroid: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;@Overrideprotected 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() {@Overridepublic 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实现截图并动画消失相关推荐

  1. android 新浪财经截屏分享,[图]Android 12截图曝光:启用全新UI 增强隐私保护功能...

    原标题:[图]Android 12截图曝光:启用全新UI 增强隐私保护功能 来源:cnBeta.COM Android 12 有望在今年秋季上线,相关的开发者预览版和 Beta 版本有望在本月晚些时候 ...

  2. Android自定义底部带有动画的Dialog

    Android自定义底部带有动画的Dialog 效果图 先看效果图,是不是你想要的呢 自定义Dialog package --.view;import android.app.Dialog; impo ...

  3. Android 图片Loading旋转动画效果

    使用场景:在数据请求或者一些加载的页面中,总需要一些过度的动画效果,很多时候我们都可以在图片中间加一个loading的旋转图片,以前也做过,今天做的时候噼里啪啦敲了半天结果运行没效果,所以今天总结下这 ...

  4. android 折叠动画,Android:展开/折叠动画

    Android:展开/折叠动画 假设我有一个垂直linearLayout: [v1] [v2] 默认情况下,v1具有visibily = GONE. 我想用扩展动画展示v1并同时向下推v2. 我试过这 ...

  5. Android Property Animation属性动画:scale缩放动画(4)

     Android Property Animation属性动画:scale缩放动画(4) 和之前我写的附录文章1,2,3相似,本文将接着使用Android Property Animation属性 ...

  6. Android 图片的帧动画

    Android之中有 Obj 动画 即 UI动画 和 Image的Fragment动画 ①Image动画 将一系列图片照顺序 排列 组成一个序列展示 XML文件存放路径: res/anim/filen ...

  7. Android开发之三种动画

    转载:http://www.cnblogs.com/angeldevil/archive/2011/12/02/2271096.html http://www.lightskystreet.com/2 ...

  8. Android自定义水波纹动画Layout

    Android自定义水波纹动画Layout 源码是双11的时候就写好了,但是我觉得当天发不太好,所以推迟了几天,没想到过了双11女友就变成了前女友,桑心.唉不说了,来看看代码吧. 展示效果 Hi前辈 ...

  9. android中设置Animation 动画效果

    在 Android 中, Animation 动画效果的实现可以通过两种方式进行实现,一种是 tweened animation 渐变动画,另一种是 frame by frame animation ...

最新文章

  1. 使用Xpose突破安卓App禁止截屏限制
  2. 【正一专栏】登贝莱,该不该来!
  3. hiho #1044 : 状态压缩·一
  4. WebSocket + Spring消息推送服务的快速实现
  5. JavaScript函数 this调用规则
  6. spoj Favorite Dice(概率dp+期望)
  7. 人工智能能够构建一个自主驱动云吗?
  8. activity 、window与view的关系 (上)
  9. 本地mysql数据库初始密码_忘记本地MySQL数据库密码的解决方法
  10. 完成端口(IOCP)详解[1/2](转载)
  11. 3. Spring Boot 从零开始学习
  12. java拦截器和过滤器的区别_拦截器和过滤器的区别
  13. Java常用代码汇总(经典代码)
  14. 二工大计算机专业,二工大 上海第二工业大学 计算机专业英语 期末考试
  15. 解决手机WiFi(电脑热点)一直正在获取IP地址或无法访问互联网【与网上其他方法不同】
  16. 计算机提示无法访问手机tf卡,电脑(手机)无法读取内存卡(存储卡)的解决方法大全...
  17. easyui的filebox赋值回显
  18. 伊通一中2021高三高考成绩查询,吉林四平最好的4所高中,第1名一骑绝尘,看看有没有你的母校?...
  19. python剔除数据_python实现对excel进行数据剔除操作实例
  20. Vivado安装找不到matlab,vivado安装System Generator不支持新版Matlab怎么办?

热门文章

  1. python怎样控制继电器_【Linux】树莓派控制继电器(C、python手把手教学)
  2. 读取3D文件mesh格式工具
  3. 广州鞋材,温泽鞋材为你效劳
  4. 605. 种花问题(贪心算法)
  5. 对于Imbalance Data的总结
  6. keil5固件库版本的工程建立
  7. Android webView中监听物理返回键一层一层退出
  8. matlab legend 太大,[转载]MATLAB中调整legend的大小位置
  9. JavaScript的隔行变色和选项卡
  10. python教程输入_Python教程(2.5)——控制台输入