Android仿微信照片浏览器

最近一直在忙IM,所以还给介绍一下IM相关的Android仿微信照片浏览器,支持照片放大缩小,长按、点击、点击照片内外等监听事件,可以实现市面上常见的长按保存照片的功能,点击照片和点击照片外的区域返回到上一界面。
效果图如下:

上代码(介绍一个支持查看多张照片并且支持单张照片查看的)
xml:(HackyViewPager demo中有)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_height="match_parent"android:layout_width="match_parent"android:id="@+id/linearlayout_main"android:background="@color/black"><com.motoband.ui.view.HackyViewPager
        android:id="@+id/view_pager"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/black"tools:context=".ui.activity.PicassoViewPagerActivity"></com.motoband.ui.view.HackyViewPager>
</LinearLayout>
public class PicassoViewPagerActivity extends AppCompatActivity {private ArrayList<String> mDatas = new ArrayList<String>();private int checkposition;HackyViewPager hackyViewPager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_picasso_viewpager);initView();initData();}private void initView() {hackyViewPager = (HackyViewPager) findViewById(R.id.view_pager);}private void initData() {//数据的传递mDatas = (ArrayList<String>) getIntent().getSerializableExtra("images");hackyViewPager.setAdapter(new SamplePagerAdapter());checkposition = getIntent().getIntExtra("position", 0) - 1;hackyViewPager.setCurrentItem(checkposition);}private class SamplePagerAdapter extends PagerAdapter {@Overridepublic int getCount() {if (mDatas == null || mDatas.size() == 0) {return 0;}return mDatas.size();}@Overridepublic View instantiateItem(ViewGroup container, final int position) {PhotoView photoView = new PhotoView(container.getContext());final PhotoViewAttacher attacher = new PhotoViewAttacher(photoView);Picasso.with(PicassoViewPagerActivity.this).load(mDatas.get(position)).into(photoView, new Callback() {@Overridepublic void onSuccess() {attacher.update();}@Overridepublic void onError() {}});container.addView(photoView, ViewPager.LayoutParams.MATCH_PARENT, ViewPager.LayoutParams.MATCH_PARENT);//长按保存attacher.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {AlertDialog.Builder builder1 = new AlertDialog.Builder(PicassoViewPagerActivity.this);builder1.setTitle("提示");builder1.setMessage("确定要保存照片?");builder1.setPositiveButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});builder1.setNegativeButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {String picPath = mDatas.get(position);Bitmap bitmap = getHttpBitmap(picPath);saveImageToGallery(getBaseContext(), bitmap);dialog.dismiss();}});builder1.show();return false;}});//点击照片/非照片展示区域返回attacher.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() {@Overridepublic void onPhotoTap(View view, float x, float y) {finish();}@Overridepublic void onOutsidePhotoTap() {finish();}});return photoView;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView((View) object);}@Overridepublic boolean isViewFromObject(View view, Object object) {return view == object;}}//url转bitmappublic Bitmap getHttpBitmap(String url) {Bitmap bitmap = null;try {URL pictureUrl = new URL(url);InputStream in = pictureUrl.openStream();bitmap = BitmapFactory.decodeStream(in);in.close();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return bitmap;}public static void saveImageToGallery(Context context, Bitmap bmp) {// 首先保存图片File appDir = new File(Environment.getExternalStorageDirectory(), "Motoband");if (!appDir.exists()) {appDir.mkdir();}String fileName = System.currentTimeMillis() + ".jpg";File file = new File(appDir, fileName);try {FileOutputStream fos = new FileOutputStream(file);bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);fos.flush();fos.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}// 其次把文件插入到系统图库try {MediaStore.Images.Media.insertImage(context.getContentResolver(),file.getAbsolutePath(), fileName, null);} catch (FileNotFoundException e) {e.printStackTrace();}Toast.makeText(context, "照片保存成功", Toast.LENGTH_SHORT).show();// 最后通知图库更新context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + Environment.getExternalStorageDirectory())));}@Overrideprotected void onResume() {super.onResume();MobclickAgent.onResume(this);}@Overrideprotected void onPause() {super.onPause();MobclickAgent.onPause(this);}}

Android仿微信照片浏览器

Android仿微信照片浏览器相关推荐

  1. Android 仿微信显示的聊天照片

    Android 仿微信显示的聊天照片 Android 仿微信显示的聊天照片,效果如下图所示: 这种显示的样式就是和微信的显示照片的样式是一样的,微信的实现我不知道是否和我一样,今天我来和大家介绍一下我 ...

  2. Android高仿微信照片选择器+预览+显示照片

    转载请说明出处: http://blog.csdn.net/lyhhj/article/details/49046109 前阵子写过一片博客,是关于选择多图上传的一个小demo,那个demo是从网上找 ...

  3. Android仿微信图片编辑处理:文字,马赛克,裁剪,涂鸦,旋转图片等

    Android仿微信图片编辑处理:文字,马赛克,裁剪,涂鸦,旋转图片等 如图: 这个项目实现了微信图片编辑处理的关键功能,如给一张图片添加文字,打上马赛克,裁剪图片,在图片上手势涂鸦.引用了karel ...

  4. android 仿微信demo————微信消息界面实现(服务端)

    android 仿微信demo----微信启动界面实现 android 仿微信demo----注册功能实现(移动端) android 仿微信demo----注册功能实现(服务端) android 仿微 ...

  5. android 表情键盘切换,Android仿微信键盘切换效果

    Android 仿微信的键盘切换(录音,表情,文字,其他),IM通讯,类似朋友圈只要涉及到文字等相关的app都会要涉及到键盘的处理,今天就给大家分享一下Android 仿微信的键盘切换. 效果图如下: ...

  6. android 仿微信头像裁剪,Android仿微信QQ设置图形头像裁剪功能

    最近在做毕业设计,想有一个功能和QQ一样可以裁剪头像并设置圆形头像,额,这是设计狮的一种潮流. 而纵观现在主流的APP,只要有用户系统这个功能,这个需求一般都是在(bu)劫(de)难(bu)逃(xue ...

  7. php仿微信底部菜单,Android实现简单底部导航栏 Android仿微信滑动切换效果

    Android仿微信滑动切换最终实现效果: 大体思路: 1. 主要使用两个自定义View配合实现; 底部图标加文字为一个自定义view,底部导航栏为一个载体,根据需要来添加底部图标; 2. 底部导航栏 ...

  8. android仿微信的activity平滑水平切换动画,Android实现简单底部导航栏 Android仿微信滑动切换效果...

    Android实现简单底部导航栏 Android仿微信滑动切换效果 发布时间:2020-10-09 19:48:00 来源:脚本之家 阅读:96 作者:丶白泽 Android仿微信滑动切换最终实现效果 ...

  9. Android 仿微信小视频录制

    Android 仿微信小视频录制 WechatShortVideo和WechatShortVideo文章

最新文章

  1. 清华大学:智能驾驶背景下转向系统发展趋势
  2. Android: ListView 和 RecyclerView 对比(一)
  3. 用单链表实现栈及操作
  4. Python爬虫解析html:lxml的HtmlElement对象获取和设置inner html
  5. 编辑器之神VIM入门
  6. c调用c++ qt_【C/C++】qt库结构及示例
  7. python主成分分析法实训报告_基于 python 的主成分分析步骤及应用实例
  8. 从神话诗歌到奇幻科学的人类探索史·《月亮》·总篇(简版)
  9. 计算机应用基础考试excel操作题,自学考试_《计算机应用基础》_上机操作_模拟练习题...
  10. c语言头随机数文件库,C语言随机数使用方法
  11. 2022年4月20日Python课堂考试复盘及课堂笔记之程序控制结构
  12. h5(网页) 调用相机拍照和相册,实现图片上传功能
  13. python中三次方_python中计算三次方怎么表示
  14. 特殊教育学校计算机教学心得,特教老师心得体会
  15. 虚拟机:host-only
  16. 7.8 锐捷网络笔试
  17. NT99141摄像头调试
  18. 看到这套试卷我释然了……
  19. redis泡菜5_《redis讲解》PPT课件.pptx
  20. 硬方案——锁相环PLL技术实战总结(基本原理、集成芯片CD4046参数设计避坑经验总结及实测验证)

热门文章

  1. 状态压缩初探(包含蓝桥算法训练 和为T,牛客 csl的校园卡)
  2. UVM-Objection机制
  3. 萤石云视频EZOpenSDK的集成与使用
  4. java范式_【java编程】三种非主流的编程范式?
  5. wordxml文档格式说明
  6. 解决java poi生成word文件格式错误的问题。
  7. Esp8266+阿里云+STM32点灯(一)
  8. Java接口自动化测试框架学习
  9. jetson nano写入镜像系统
  10. 关于mysql数据库中插入特殊字符(emoji表情)报错1366的问题注意点