android 微信图片浏览,Android微信图片浏览框架设计 2022-10-05 08:44 48阅读 0赞 一、业务场景 1、聊天界面发送图片==>多选点选+有右上角”发送”+图片预览==>图片预览支持右上角”发送”逻辑 2、发表动态==>多选点选+右上角”完成” + 图片预览==>图片预览支持右上角”完成”逻辑 3、个人资料更改头像==>单选点选 + 图片预览截图==>图片预览截图支持右上角”使用”逻辑 二、Intent参数设计; (Intent传参原则:尽量不要使用自定义类型专递参数) 1、最基本的参数传递(可选图片最大数目、右上角的标题、单选模式还是多选模式、返回结果的参数) /\*\* 最大图片选择次数,int类型,默认9 \*/ public static final String EXTRA\_SELECT\_COUNT = "max\_select\_count"; /\*\* 发送按钮的标题 如完成或发送 \*/ public static final String EXTRA\_SUBMIT\_TITLE = "extra\_submit\_title"; /\*\* 图片选择模式,默认多选 \*/ public static final String EXTRA\_SELECT\_MODE = "select\_count\_mode"; /\*\* 选择结果,返回为 ArrayList 图片路径集合 \*/ public static final String EXTRA\_RESULT = "select\_result"; 2、扩展部分参数传递(图片选择界面的第一个Item是否显示拍照功能、预览的activity是否支持”勾选取消结束”勾选按钮) /\*\* 是否显示相机,默认显示 \*/ public static final String EXTRA\_SHOW\_CAMERA = "show\_camera"; /\*\* 是否跳转到ImageDetailCheckPicsAct上\*/ public static final String EXTRA\_JUMPTOCHECKPICS = "is\_jumpto\_checkpics"; 3、在”发表动态选择”已经选了5张图片,再去选择图片–图片浏览器需要将已选的图片勾选状态设置为勾选 /\*\* 默认已被选择集 \*/ public static final String EXTRA\_DEFAULT\_SELECTED\_LIST = "default\_list"; 4、截图功能(单选模式下,如果启动截图模式,那么选择后跳转截图界面) /\*\* 单选是否原图返回或先跳转截图后返回 \*/ public static final String RESIZEBIT = "RESIZEBIT"; /\*\* 截图保存的路径 \*/ public static final String RESULT = "resultPath"; /\*\* 单选 是否截图 \*/ public static final String MODE\_SCALE\_BOOLEAN = "MODE\_SCALE\_BOOLEAN"; /\*\* 单选 截图区域蓝色框的宽;单位dp \*/ public static final String SCALEW = "scaleW"; /\*\* 单选 截图区域蓝色框的高;单位dp \*/ public static final String SCALEH = "SCALEH"; /\*\* 单选 截图后图片保存的像素宽;单位sp \*/ public static final String LIMITW = "limitWidth"; /\*\* 单选 截图后图片保存的像素高;单位sp \*/ public static final String LIMITH = "limitHight"; /\*\* 单选截图的保存的路径 \*/ public static final String MODE\_SCALE\_PATH = "MODE\_SCALE\_PATH"; 三、理清楚需求之后进行设计 此处省略;分享的代码实现的功能,尚未设计优化代码可读性较差 代码项目github地址IMAlbum 四、代码使用方法 public static void jumpToSelectPics(Activity mContext, boolean isShowCamera, int selectMaxCount, int selectMode, String submitBtnStr, boolean isJumpToCheckPics, ArrayList hasSelectList) \{ Intent intent = new Intent(mContext, MultiImageSelectorActivity.class); // whether show camera intent.putExtra(MultiImageSelectorActivity.EXTRA\_SHOW\_CAMERA, isShowCamera); // String of submit button intent.putExtra(MultiImageSelectorActivity.EXTRA\_SUBMIT\_TITLE, submitBtnStr); // String of submit button intent.putExtra(MultiImageSelectorFragment.EXTRA\_JUMPTOCHECKPICS, isJumpToCheckPics); // max select image amount intent.putExtra(MultiImageSelectorActivity.EXTRA\_SELECT\_COUNT, selectMaxCount); // select mode (MultiImageSelectorActivity.MODE\_SINGLE OR MultiImageSelectorActivity.MODE\_MULTI) intent.putExtra(MultiImageSelectorActivity.EXTRA\_SELECT\_MODE, selectMode); // EXTRA\_DEFAULT\_SELECTED\_LIST if (hasSelectList != null) \{ intent.putStringArrayListExtra(MultiImageSelectorActivity.EXTRA\_DEFAULT\_SELECTED\_LIST, hasSelectList); \} // mContext.startActivityForResult(intent, REQUEST\_IMAGE); \} /\*\* \* 图片格式jpeg \* @param picResultPath 图片的要保存的地址 \* @param scaleW 截图区域的宽度 单位 dp \* @param scaleH 截图区域的高度 单位 dp \* @param limtWidth 裁剪出来的图的宽度 \* @param limitHight 裁剪出来的图的高度 \* @param isScaleImg 是否按照 limtWidth、limitHight的比例进行放大缩小 \* @description: \* @author zhangjianlin (990996641) \* @date 2015年6月11日 下午4:25:00 \*/ public static void jumpToSelecAndCropImg(Activity mContext, String picResultPath, int scaleW, int scaleH, int limtWidth, int limitHight, boolean isScaleImg) \{ Intent intent = new Intent(mContext, MultiImageSelectorActivity.class); // whether show camera intent.putExtra(MultiImageSelectorActivity.EXTRA\_SHOW\_CAMERA, false); // max select image amount intent.putExtra(MultiImageSelectorActivity.EXTRA\_SELECT\_COUNT, 1); // select mode (MultiImageSelectorActivity.MODE\_SINGLE OR MultiImageSelectorActivity.MODE\_MULTI) intent.putExtra(MultiImageSelectorActivity.EXTRA\_SELECT\_MODE, MultiImageSelectorActivity.MODE\_SINGLE); // intent.putExtra(MultiImageSelectorActivity.EXTRA\_DEFAULT\_CROP\_CAMERA, isScaleImg); intent.putExtra(CropImageAct.RESIZEBIT, isScaleImg); intent.putExtra(CropImageAct.RESULT, picResultPath); intent.putExtra(CropImageAct.SCALEW, scaleW); intent.putExtra(CropImageAct.SCALEH, scaleH); intent.putExtra(CropImageAct.LIMITW, limtWidth); intent.putExtra(CropImageAct.LIMITH, limitHight); mContext.startActivityForResult(intent, REQUEST\_CROPIMAGE); \} /\*\* \* @Description:选择单张图片不剪切 \* 返回值 ArrayList switch (requestCode) \{ case IntentUtils.REQUEST\_IMAGE: if (data != null) \{ ArrayList resultList = data .getStringArrayListExtra(MultiImageSelectorActivity.EXTRA\_RESULT); \} break; \} \* @param mContext \*/ public static void jumpToSelectNoCropImg(Activity mContext) \{ jumpToSelectPics(mContext, false, 2, MultiImageSelectorActivity.MODE\_SINGLE); \} 五、baseselectactivity类 /\*\* @Override public void onConfigurationChanged(Configuration newConfig) \{ super.onConfigurationChanged(newConfig); \} android:launchMode="singleTask" android:configChanges="orientation|keyboardHidden|screenSize" > \* @Description: 选择图片的act \* @author zhangjianlin \* @date 2015-9-24 下午2:06:28 \*/ public abstract class BaseSelectPicAct extends Activity \{ private final int CROPCAMARA\_TAKEPHOTO = 1003; private final int CROPCAMARA\_SELECTFROMALBUM = 1004; /\*\* 从 拍照中选择 \*/ private final int ACTIVITY\_RESULT\_CROPCAMARA\_WITH\_DATA = 1; private File mPicFile; // 选择图片路径 private String picPath; @Override public void onConfigurationChanged(Configuration newConfig) \{ super.onConfigurationChanged(newConfig); \} @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) \{ super.onActivityResult(requestCode, resultCode, data); if (resultCode != RESULT\_OK) \{ return; \} switch (requestCode) \{ case IntentUtils.REQUEST\_IMAGE: // 选择照片 /\*\* add by zjl \*/ if (null != data) \{ ArrayList resultList = data .getStringArrayListExtra(MultiImageSelectorActivity.EXTRA\_RESULT); hasSelectPicsNoCrop(resultList); /\* if (null != resultList) \{ \* \* \} \*/ \} break; case ACTIVITY\_RESULT\_CROPCAMARA\_WITH\_DATA: // 拍照 /\* if (mPicFile.exists()) \{ \* \* \} \*/ if (mPicFile == null && !TextUtils.isEmpty(picPath)) mPicFile = new File(picPath); if (null != mPicFile && mPicFile.exists()) \{ hasTakePhotoPic(mPicFile); \} break; case IntentUtils.REQUEST\_CROPIMAGE: if (null == data) \{ return; \} if (TextUtils.isEmpty(mPicFile.toString()) || !mPicFile.exists()) \{ Toast.makeText(this, "没有选择图片", Toast.LENGTH\_LONG).show(); return; \} String mPicNativePath = Environment.getExternalStorageDirectory().getAbsolutePath() +"/image" + mPicFile.getName(); try \{ FilecacheTool.copyFile(mPicFile.getAbsolutePath(), mPicNativePath); \} catch (Exception e) \{ e.printStackTrace(); \} hasPicsCroped(mPicNativePath); break; \} \}; protected void selectPhoto() \{ ImageTool.jumpToSelectNoCropImg(this); \} protected void selectPhotoAndCrop() \{ mPicFile = ImageTools.initTempFile(); /\* photoIntent = ImageTools.cropPhotoOfCompressFromGalleryIntent(Uri.fromFile(mPicFile)); startActivityForResult(photoIntent, Constant.ACTIVITY\_RESULT\_CROPIMAGE\_WITH\_DATA); \*/ ImageTool.jumpToSelecAndCropImg(this, mPicFile.toString(), 300, 300, 600, 600, true); \} /\*\* 拍照 \*/ protected void takePhoto() \{ if (!ImageTools.isSDCardExist()) \{ Toast.makeText(this, "没有内存卡", Toast.LENGTH\_LONG).show(); return; \} mPicFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" \+ System.currentTimeMillis() + ".jpg"); picPath = mPicFile.getAbsolutePath(); Intent intent = new Intent(MediaStore.ACTION\_IMAGE\_CAPTURE); intent.putExtra(MediaStore.EXTRA\_OUTPUT, Uri.fromFile(mPicFile)); startActivityForResult(intent, ACTIVITY\_RESULT\_CROPCAMARA\_WITH\_DATA); \} protected abstract void hasSelectPicsNoCrop(ArrayList resultList); protected abstract void hasTakePhotoPic(File mPicFile); protected abstract void hasPicsCroped(String mPicNativePath); @Override protected void onSaveInstanceState(Bundle outState) \{ outState.putString("picPathCache", picPath); super.onSaveInstanceState(outState); \} @Override protected void onRestoreInstanceState(Bundle savedInstanceState) \{ picPath = savedInstanceState.getString("picPathCache"); super.onRestoreInstanceState(savedInstanceState); \} \} 六、图库选择simple public class AlbumTestAct extends BaseSelectPicAct implements OnClickListener \{ private ImageView iv\_showresult; @Override protected void onCreate(Bundle savedInstanceState) \{ // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.act\_albumtest); findViewById(R.id.tv\_takephoto).setOnClickListener(this); findViewById(R.id.tv\_selectphoto).setOnClickListener(this); findViewById(R.id.tv\_selectandcrop).setOnClickListener(this); iv\_showresult = (ImageView) findViewById(R.id.iv\_showresult); \} @Override public void onClick(View v) \{ // TODO Auto-generated method stub switch (v.getId()) \{ case R.id.tv\_takephoto: takePhoto(); break; case R.id.tv\_selectphoto: selectPhoto(); break; case R.id.tv\_selectandcrop: selectPhotoAndCrop(); break; default: break; \} \} @Override protected void hasSelectPicsNoCrop(ArrayList resultList) \{ // TODO Auto-generated method stub if (null != resultList) \{ if(resultList.size() > 0) \{ ImageLoader.getInstance().displayImage(Scheme.FILE.wrap(resultList.get(0)), iv\_showresult); \} \} \} @Override protected void hasTakePhotoPic(File mPicFile) \{ // TODO Auto-generated method stub if(null != mPicFile && mPicFile.exists()) \{ ImageLoader.getInstance().displayImage(Scheme.FILE.wrap(mPicFile.getPath()), iv\_showresult); \} \} @Override protected void hasPicsCroped(String mPicNativePath) \{ // TODO Auto-generated method stub if(null != mPicNativePath && new File(mPicNativePath).exists()) \{ ImageLoader.getInstance().displayImage(Scheme.FILE.wrap(mPicNativePath), iv\_showresult); \} \} \} 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。 文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。
相关 微信小程序生成图片 又是一波干货~ .wxml <view class='more' bindtap='saveImageToPhotosAlbum'>保存图片</view> 矫情吗;*/ 2021年09月17日 09:04/ 0 赞/ 282 阅读
相关 js 判断微信h5浏览 //判断是否微信登陆 function isWeiXin() { var ua = window.navigator.user 系统管理员/ 2022年05月26日 20:42/ 0 赞/ 70 阅读
相关 Android 超高仿微信图片选择器 图片该这么加载 1. 2. 3. [件夹的PopupWindow][PopupWindow] 4. [选择不同的文件夹][Link 1] 出处: [htt 旧城等待,/ 2022年08月05日 18:24/ 0 赞/ 33 阅读
相关 android 微信分享 场景: 分享使用的时mob的ShareSDK社会化分享组件。 步骤1:app代码编写完成后,先打包一个未签名的apk包,即在Eclipse中“Android Too 柔情只为你懂/ 2022年08月10日 17:18/ 0 赞/ 48 阅读
相关 Android微信界面的设计 Android微信界面的设计 微信主界面: (1)整体采用垂直的LinearLayout线性布局 (2)最上面是ActionBar,搜索框SearchView,Ov ゝ一纸荒年。/ 2022年09月21日 21:06/ 0 赞/ 47 阅读
相关 仿微信表情图片 作为刚刚初出茅庐的不到四个月初生牛犊,因为平时公司项目比较少,给了新人相当多的时间学习,所以我就在研究了一下即时通讯软件,最近一个礼拜的时间进度都堵在了表情模块这一部分,所以我 怼烎@/ 2022年09月22日 09:18/ 0 赞/ 34 阅读
相关 Android微信界面的设计 Android微信界面的设计 【[尊重][Link 1] [原创,转载请注明出处][Link 1] 】http://blog.csdn.net/guyuealian/ 我会带着你远行/ 2022年09月22日 19:40/ 0 赞/ 64 阅读
相关 android 微信图片浏览,Android微信图片浏览框架设计 一、业务场景 1、聊天界面发送图片==>多选点选+有右上角”发送”+图片预览==>图片预览支持右上角”发送”逻辑 2、发表动态==>多选点选+右上角”完成” + 图片预览= 朴灿烈づ我的快乐病毒、/ 2022年10月05日 08:44/ 0 赞/ 49 阅读
相关 PHP实现图片浏览排行榜,php 记录图片浏览次数次数 $url='http://'.$\_SERVER\['HTTP\_HOST'\].$\_SERVER\['PHP\_SELF'\].'?'.$\_SERVER\['QUERY\ ╰+攻爆jí腚メ/ 2022年11月17日 22:45/ 0 赞/ 27 阅读
还没有评论,来说两句吧...