Android 仿微信朋友圈查看
项目要做一个类似于这样的功能,就做了。 项目下载地址:http://download.csdn.net/detail/u014608640/9917626
一,看下效果:
二.activity类
public class MainActivity extends Activity { /** Item数据实体集合 */ private ArrayList<ItemEntity> itemEntities; /** ListView对象 */ private ListView listview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listview = (ListView) findViewById(R.id.listview); initData(); listview.setAdapter(new ListItemAdapter(this, itemEntities)); } /** * 初始化数据 */ private void initData() { itemEntities = new ArrayList<ItemEntity>(); // 1.无图片 ItemEntity entity1 = new ItemEntity(// "http://img.my.csdn.net/uploads/201410/19/1413698871_3655.jpg", "张三", "今天天气不错...", null); itemEntities.add(entity1); // 2.1张图片 ArrayList<String> urls_1 = new ArrayList<String>(); urls_1.add("http://img.my.csdn.net/uploads/201410/19/1413698883_5877.jpg"); ItemEntity entity2 = new ItemEntity(// "http://img.my.csdn.net/uploads/201410/19/1413698865_3560.jpg", "李四", "今天雾霾呢...", urls_1); itemEntities.add(entity2); // 3.3张图片 ArrayList<String> urls_2 = new ArrayList<String>(); urls_2.add("http://img.my.csdn.net/uploads/201410/19/1413698867_8323.jpg"); urls_2.add("http://img.my.csdn.net/uploads/201410/19/1413698883_5877.jpg"); urls_2.add("http://img.my.csdn.net/uploads/201410/19/1413698837_5654.jpg"); ItemEntity entity3 = new ItemEntity(// "http://img.my.csdn.net/uploads/201410/19/1413698837_5654.jpg", "王五", "今天好大的太阳...", urls_2); itemEntities.add(entity3); // 4.6张图片 ArrayList<String> urls_3 = new ArrayList<String>(); urls_3.add("http://img.my.csdn.net/uploads/201410/19/1413698837_7507.jpg"); urls_3.add("http://img.my.csdn.net/uploads/201410/19/1413698865_3560.jpg"); urls_3.add("http://img.my.csdn.net/uploads/201410/19/1413698867_8323.jpg"); urls_3.add("http://img.my.csdn.net/uploads/201410/19/1413698837_5654.jpg"); urls_3.add("http://img.my.csdn.net/uploads/201410/19/1413698883_5877.jpg"); urls_3.add("http://img.my.csdn.net/uploads/201410/19/1413698839_2302.jpg"); ItemEntity entity4 = new ItemEntity(// "http://img.my.csdn.net/uploads/201410/19/1413698883_5877.jpg", "赵六", "今天下雨了...", urls_3); itemEntities.add(entity4); }
三.适配器
public class ListItemAdapter extends BaseAdapter { private Context mContext; private ArrayList<ItemEntity> items; public ListItemAdapter(Context ctx, ArrayList<ItemEntity> items) { this.mContext = ctx; this.items = items; } @Override public int getCount() { return items == null ? 0 : items.size(); } @Override public Object getItem(int position) { return items.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { holder = new ViewHolder(); convertView = View.inflate(mContext, R.layout.item_list, null); holder.iv_avatar = (ImageView) convertView.findViewById(R.id.iv_avatar); holder.tv_title = (TextView) convertView.findViewById(R.id.tv_title); holder.tv_content = (TextView) convertView.findViewById(R.id.tv_content); holder.gridview = (NoScrollGridView) convertView.findViewById(R.id.gridview); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } ItemEntity itemEntity = items.get(position); holder.tv_title.setText(itemEntity.getTitle()); holder.tv_content.setText(itemEntity.getContent()); // 使用ImageLoader加载网络图片 DisplayImageOptions options = new DisplayImageOptions.Builder()// .showImageOnLoading(R.drawable.ic_launcher) // 加载中显示的默认图片 .showImageOnFail(R.drawable.ic_launcher) // 设置加载失败的默认图片 .cacheInMemory(true) // 内存缓存 .cacheOnDisk(true) // sdcard缓存 .bitmapConfig(Config.RGB_565)// 设置最低配置 .build();// ImageLoader.getInstance().displayImage(itemEntity.getAvatar(), holder.iv_avatar, options); final ArrayList<String> imageUrls = itemEntity.getImageUrls(); if (imageUrls == null || imageUrls.size() == 0) { // 没有图片资源就隐藏GridView holder.gridview.setVisibility(View.GONE); } else { holder.gridview.setAdapter(new NoScrollGridAdapter(mContext, imageUrls)); } // 点击回帖九宫格,查看大图 holder.gridview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub imageBrower(position, imageUrls); } }); return convertView; } /** * 打开图片查看器 * * @param position * @param urls2 */ protected void imageBrower(int position, ArrayList<String> urls2) { Intent intent = new Intent(mContext, ImagePagerActivity.class); // 图片url,为了演示这里使用常量,一般从数据库中或网络中获取 intent.putExtra(ImagePagerActivity.EXTRA_IMAGE_URLS, urls2); intent.putExtra(ImagePagerActivity.EXTRA_IMAGE_INDEX, position); mContext.startActivity(intent); } /** * listview组件复用,防止“卡顿” * * @author Administrator * */ class ViewHolder { private ImageView iv_avatar; private TextView tv_title; private TextView tv_content; private NoScrollGridView gridview; }
四:gv适配器
public class NoScrollGridAdapter extends BaseAdapter { /** 上下文 */ private Context ctx; /** 图片Url集合 */ private ArrayList<String> imageUrls; public NoScrollGridAdapter(Context ctx, ArrayList<String> urls) { this.ctx = ctx; this.imageUrls = urls; } @Override public int getCount() { // TODO Auto-generated method stub return imageUrls == null ? 0 : imageUrls.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return imageUrls.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = View.inflate(ctx, R.layout.item_gridview, null); ImageView imageView = (ImageView) view.findViewById(R.id.iv_image); DisplayImageOptions options = new DisplayImageOptions.Builder()// .cacheInMemory(true)// .cacheOnDisk(true)// .bitmapConfig(Config.RGB_565)// .build(); ImageLoader.getInstance().displayImage(imageUrls.get(position), imageView, options); return view; } }
五:图片查看器
/** * 图片查看器 */ public class ImagePagerActivity extends FragmentActivity { private static final String STATE_POSITION = "STATE_POSITION"; public static final String EXTRA_IMAGE_INDEX = "image_index"; public static final String EXTRA_IMAGE_URLS = "image_urls"; private HackyViewPager mPager; private int pagerPosition; private TextView indicator; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.image_detail_pager); pagerPosition = getIntent().getIntExtra(EXTRA_IMAGE_INDEX, 0); ArrayList<String> urls = getIntent().getStringArrayListExtra(EXTRA_IMAGE_URLS); mPager = (HackyViewPager) findViewById(R.id.pager); ImagePagerAdapter mAdapter = new ImagePagerAdapter(getSupportFragmentManager(), urls); mPager.setAdapter(mAdapter); indicator = (TextView) findViewById(R.id.indicator); CharSequence text = getString(R.string.viewpager_indicator, 1, mPager.getAdapter().getCount()); indicator.setText(text); // 更新下标 mPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int arg0) { CharSequence text = getString(R.string.viewpager_indicator, arg0 + 1, mPager.getAdapter().getCount()); indicator.setText(text); } }); if (savedInstanceState != null) { pagerPosition = savedInstanceState.getInt(STATE_POSITION); } mPager.setCurrentItem(pagerPosition); } @Override public void onSaveInstanceState(Bundle outState) { outState.putInt(STATE_POSITION, mPager.getCurrentItem()); } private class ImagePagerAdapter extends FragmentStatePagerAdapter { public ArrayList<String> fileList; public ImagePagerAdapter(FragmentManager fm, ArrayList<String> fileList) { super(fm); this.fileList = fileList; } @Override public int getCount() { return fileList == null ? 0 : fileList.size(); } @Override public Fragment getItem(int position) { String url = fileList.get(position); return ImageDetailFragment.newInstance(url); } }
Android 仿微信朋友圈查看的更多相关文章
- Android 仿微信朋友圈添加图片
github地址(欢迎下载Demo) https://github.com/zhouxu88/WXCircleAddPic 老习惯,先上图,着急用的朋友,直接带走Demo,先拿来用吧,毕竟老板催的紧, ...
- Android 仿微信朋友圈发动态功能(相册图片多选)
代码分享 代码名称: 仿微信朋友圈发动态功能(相册图片多选) 代码描述: 仿微信朋友圈发动态功能(相册图片多选) 代码托管地址: http://www.apkbus.com/android-15276 ...
- Android 仿微信朋友圈发表图片拖拽和删除功能
朋友圈实现原理 我们使用 Android Device Monitor 来分析朋友圈发布图片的界面实现原理.如果需要分析其他应用的界面实现也是采用这种方法哦. 打开 Android Device Mo ...
- Android仿微信朋友圈,全文收起功能,附源码
在众多的社交类软件中,朋友圈是必不可少的,可以与好友.同学等分享自己的日常和有意思的事情,在开发社交类App时,朋友圈发表的内容你不可能让他全部显示,全部显示的话用户体验度会非常不好,这时就要用到全文 ...
- Android 仿微信朋友圈拍小视频上传到服务器
这个接上一个写的实现拍小视频和传到服务器的 界面是这个样子滴. 我也知不知道怎么给图片搞小一点o(╯□╰)o 布局文件是这样的[认真脸] <?xml version="1.0&quo ...
- Android NineGridLayout — 仿微信朋友圈和QQ空间的九宫格图片展示自定义控件
NineGridLayout 一个仿微信朋友圈和QQ空间的九宫格图片展示自定义控件. GitHub:https://github.com/HMY314/NineGridLayout 一.介绍 1.当只 ...
- Android 高仿微信朋友圈动态, 支持双击手势放大并滑动查看图片。
转载请注明出处:http://blog.csdn.net/sk719887916/article/details/40348873 作者skay: 最近参与了开发一款旅行APP,其中包含实时聊天和动态 ...
- Android仿微信朋友圈图片查看器
转载请注明出处:http://blog.csdn.net/allen315410/article/details/40264551 看博文之前,希望大家先打开自己的微信点到朋友圈中去,细致观察是不是发 ...
- 试用友盟SDK实现Android分享微信朋友圈
社会化分享是眼下必学且火热的功能.之前有写第三方登录,那仅仅是社会化分享的一部分.今天来玩玩分享微信朋友圈. 为了方便操作,还是依照步骤写. 一,注冊 注冊应用已经在这里具体说明过了,这里就不多提了. ...
随机推荐
- 20145314郑凯杰 《Java程序设计》实验四 实验报告
20145314郑凯杰 <Java程序设计>实验四 实验报告 实验要求 完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用 ...
- 20145329 《Java程序设计》第七周学习总结
教材学习内容总结 +JDK出现之前就已经存在的java.util.Date与java.util.Calendar等API +如果想取得系统时间,方法之一是使用System.currentTimeMil ...
- linux内核第二周
chapter 1 知识点梳理 (一)计算机是如何工作的?(总结)——三个法宝 ①存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: ②函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语 ...
- js中比较实用的函数用法
<table id="table"> <tr> <th>用户ID</th> <th>用户名</th> < ...
- ubuntu 18.04在更新软件库时出现E: Release file for http://security.ubuntu.com/ubuntu/dists/bionic-security/InRelease is not valid yet...
1.完整的错误信息如下: E: Release file for http://security.ubuntu.com/ubuntu/dists/bionic-security/InRelease i ...
- 【bzoj2333 & luoguP3273】棘手的操作(线段树合并)
题目传送门:bzoj2333 luoguP3273 这操作还真“棘手”..听说这题是可并堆题?然而我不会可并堆.于是我就写了线段数合并,然后调了一晚上,数据结构毁一生!!!QAQ…… 其实这题也可以把 ...
- shell统计各省的百强县
原始数据在最后 baiqiang.txt文件中 shell命令: cat baiqiang.txt | grep -P "^国|^☆" | awk -F" " ...
- Decode Ways,编码方式数量求解。动态规划问题。
问题描述: A message containing letters from A-Z is being encoded to numbers using the following mapping: ...
- codeforces242E XOR on Segment
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- shell脚本中case select 的使用
#!/bin/bash # case echo "1.Install PHP" echo "2.Install Mysql" echo "3.Inst ...