仿QQ聊天界面里边的相册(QQ相册)
最近因为项目需求,需要做一个QQ聊天界面里边的相册功能,那是个什么功能?难道和微信不一样???试了一下,厉害了,我的哥,竟然可以滑动选择图片,这是咋弄的,还可以这么玩,好奇!!!必须给整出来,就算没有这个需求了,也要整出来,所有意思啊
百度,Google,找了半天,只有一篇,CSDN上边有一篇http://blog.csdn.net/chendong_/article/details/52473160,就是这个了,还有github上边也有一篇,https://github.com/chendongMarch/SlidingCheckSample,应该是同一个人的,毕竟项目名字是一样的,其他的没注意看,不管他,下载下来看看再说
虽然有点出入吧,但是大体上基本没错,运行效果
演示视频
普通模式演示视频
九宫格模式演示视频
大体就是这样子的了,但是博主就说明了一下他的framelayout是怎么重写的,那么我再补充些,在activity里边是怎么运行的吧,也便于以后再有这个需求的时候,能有个地方查找到,更容易入手
package com.march.slidingchecksample;import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;import com.march.quickrvlibs.RvViewHolder;
import com.march.quickrvlibs.SimpleRvAdapter;
import com.march.quickrvlibs.inter.OnClickListener;
import com.march.quickrvlibs.inter.OnLongClickListener;
import com.march.slidingselect.SlidingSelectLayout;import java.util.ArrayList;
import java.util.List;/*** 直接集成activity,然后添加方法 各种初始化 也是可以的,但是可能是博主为了对6.0进行兼容,所以进行了大量封装* 但是有用佮只有本来的几个方法,最后边的三个方法 基本没用, 前提是SDK版本必须是22以下(包含22)*/
public class MainActivity extends MyBaseActivity {private RecyclerView mRv;private SlidingSelectLayout mScl;private List<Demo> demos;private int size;private float spanCount = 4f;private SimpleRvAdapter<Demo> adapter;/**** 初始化数据*/@Overrideprotected void onInitDatas() {super.onInitDatas();/**(getResources().getDisplayMetrics().widthPixels获取屏幕宽度*///屏幕的偏移量 是屏幕的1/4 因为recyclerview的gridview布局里边每行有四个item,所以偏移量是屏幕的1/4,//如果每行有三个item 则spanCount = 1f;size = (int) (getResources().getDisplayMetrics().widthPixels / spanCount);demos = new ArrayList<>();for (int i = 0; i < 50; i++) {demos.add(new Demo(i, "this is " + i));}}/**** 初始化view* @param save*/@Overrideprotected void onInitViews(final Bundle save) {super.onInitViews(save);mRv = getView(R.id.recyclerview);mScl = getView(R.id.scl);/**展示recyclerview为gridview类型 布局填充器**/mRv.setLayoutManager(new GridLayoutManager(mContext, (int) spanCount));createAdapter();}/**** 滑动监听事件*/@Overrideprotected void onInitEvents() {super.onInitEvents();/**滑动选择事件*/mScl.setOnSlidingSelectListener(new SlidingSelectLayout.OnSlidingSelectListener<Demo>() {@Overridepublic void onSlidingSelect(int pos, View parentView, Demo data) {//滑动选中之后,修改集合的数据为true 默认值为false 因为没有设置类型 则取默认值/***获取item是否选中*/demos.get(pos).isChanged = !demos.get(pos).isChanged;/**更改item*//**notifyItemChanged表示在集合里边的数据发生改变的时候,更改本item的变化*/adapter.notifyItemChanged(pos);}});}/**** 初始化适配器*/private void createAdapter() {/**simpleRvAdapter相当于simpleadapter,同样是适配器的一种**/adapter = new SimpleRvAdapter<Demo>(mContext, demos, R.layout.item_rv) {@Overridepublic void onBindView(RvViewHolder holder, Demo data, int pos, int type) {ViewGroup.LayoutParams lp = holder.getParentView().getLayoutParams();lp.width = size;lp.height = size;TextView tv = (TextView) holder.getView(R.id.content);if (data.isChanged) {tv.setTextColor(Color.RED);tv.setText("change " + data.desc);} else {tv.setTextColor(Color.WHITE);tv.setText(data.desc);}/**设置settag,至于没有gettag,博主已经在重写的framelayout里边写完了*/mScl.markView(holder.getParentView(), pos, data);}};adapter.setOnChildClickListener(new OnClickListener<Demo>() {@Overridepublic void onItemClick(int pos, RvViewHolder holder, Demo data) {data.isChanged = !data.isChanged;/**notifyItemChanged表示在集合里边的数据发生改变的时候,更改本item的变化*/adapter.notifyItemChanged(pos);}});/**此方法可以忽略,如果只想做一个界面,博主只是为了展示一个效果*/adapter.setOnItemLongClickListener(new OnLongClickListener<Demo>() {@Overridepublic void onItemLongClick(int pos, RvViewHolder holder, Demo data) {startActivity(new Intent(mContext, ItemHeaderRuleActivity.class));}});mRv.setAdapter(adapter);}/**** 添加布局 创建布局* @return*/@Overrideprotected int getLayoutId() {return R.layout.activity_main;}/*** 没有权限* @return*/@Overrideprotected String[] getPermission2Check() {return new String[0];}/**** 是否显示titleBar 返回false 则隐藏titleBar* @return*/@Overrideprotected boolean isInitTitle() {return false;}}
具体代码,注释已写好,说下需要注意的地方,as开发人员需要在项目的build.gradle里边 添加下边的代码
dependencies {classpath 'com.android.tools.build:gradle:2.1.3'classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'}
然后更新,花费时间会很长,基本五到十分钟吧,在下载的时候,你可以先看下上百年的代码注释,还有一个地方需要注意,因为博主已经兼容了6.0,自然监听权限的框架肯定是少不了的,所以呢,SDK版本号,就必须改成23了
android {compileSdkVersion 23buildToolsVersion "23.0.3"
至于在哪里修改,应该不用我说了吧,不知道的百度吧。
在项目app的build.gradle里边还需要添加两个包
compile 'com.march.quickrvlibs:quickrvlibs:2.1.3'compile 'com.march.baselib:baselib:0.0.1'
我记得需要改动的就这些了,嗯,如果还有忘记的,欢迎补充。
仿QQ聊天界面里边的相册(QQ相册)相关推荐
- java qq聊天界面代码,Java简易qq聊天,代码
Java简易qq聊天,代码 关注:156 答案:2 手机版 解决时间 2021-02-26 11:56 提问者心死旳很干净 2021-02-25 16:17 Java简易qq聊天,代码 最佳答案 ...
- qq聊天界面 java程序 51cto_Java QQ项目详细设计之:组操作模块
好长时间没发博文了,今天再写点,今天写qq软件的组操作模块,由于客户端方面的组操作不需要复杂的逻辑,所以就不写客户端了,只写一下服务器端的组操作响应,好,先写一下伪码: 组操作模块 由于基本的几个组操 ...
- C语言实现类似QQ聊天界面抖动功能
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104991863 实 ...
- 点击跳转到QQ聊天界面
<!--//需要添加好友验证--><a href="tencent://message/?uin=QQ号码&Site=&Menu=yes"> ...
- gui编程实践(2)--qq聊天界面 JTextArea多行文本框组件
//qq聊天界面 package com.test; import java.awt.*; import javax.swing.*; public class Demo8_10 extends JF ...
- 【3】QQ 聊天界面
1.说明 稍微修改了下QQ示例里面的聊天界面界面,然后把代码扣过来完成了QQ聊天界面部分,效果还可以. 不过自己添加了消息响应:窗口抖动,截屏,字体栏的显示和隐藏 2.代码部分 // QQTalk.h ...
- qt小项目 代码实现简易的QQ聊天界面
qt小项目 代码实现简易的QQ聊天界面 代码 效果图 总结 代码 myDialog.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QW ...
- QQ聊天界面的布局和设计(IOS篇)-第二季
QQChat Layout - 第二季 本来第二季是快写好了, 也花了点功夫, 结果gitbook出了点问题, 给没掉了.有些细节可能会一带而过, 如有疑问, 相互交流进步~. 在第一季中我们完成了Q ...
- 防qq聊天界面纯HTML5,html5 实现qq聊天的气泡效果
教程:http://m.blog.csdn.net/blog/yhc13429826359/38778337 写的很好.自己实现的时候,由于img float:left,会脱离文档流,导致结构混乱. ...
- 使用js实现的带输入状态的简单的仿微信聊天界面
使用js实现的简单的仿微信聊天界面,实现固定的聊天回复功能,只能是固定的5句,但是回复的内容可以在代码的判断中进行修改. 实现的效果有:1.实现仿微信的聊天界面 2.实现仿微信的正在输入功能. 原理: ...
最新文章
- Openstack组件部署 — Nova_Install and configure a compute node
- web项目获取运行时...\WEB-INF\classes目录下文件
- linux配置ip 网关 和dns(转)
- 我阅读的第一个程序GridView遇到的问题
- cad模糊查询符号_万能模糊查询SQL
- ASP——Request.Form()方法获取POST提交方式的表单中文乱码解决方案
- PHP做二次开发:ThinkCMF门户应用安装
- Linux服务器架设笔记-Squid服务器配置
- 【论文笔记】PTE:预测性文本嵌入
- 如何设置CSDN的ID(仅新建可设置)
- 单片机c语言程序编写歌谱,单片机简谱程序
- Phase2 Day14 Collections RedBlackTree
- adobe官方卸载工具:Creative Cloud Cleaner Tool Mac版
- html怎样在视频上添加文字,视频底部加一行文字 如何在视频上加文字
- vue3 Extraneous non-props attributes (modelValue) were passed to component but could not be automati
- Excel·VBA按列拆分工作表、工作簿
- 无人机利用视觉slam实现位置估计
- 利用c语言编写一个时钟计时器(c语言基础练习)
- Ubuntu上mysql的安装及使用【转】
- 从零开始一键安装TeslaMate