仿QQ聊天界面里边的相册(QQ相册)

2023-12-22 14:32
文章标签 界面 qq 聊天 相册 里边

本文主要是介绍仿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相册)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/524301

相关文章

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

一款支持同一个屏幕界面同时播放多个视频的视频播放软件

GridPlayer 是一款基于 VLC 的免费开源跨平台多视频同步播放工具,支持在一块屏幕上同时播放多个视频。其主要功能包括: 多视频播放:用户可以在一个窗口中同时播放任意数量的视频,数量仅受硬件性能限制。支持多种格式和流媒体:GridPlayer 支持所有由 VLC 支持的视频格式以及流媒体 URL(如 m3u8 链接)。自定义网格布局:用户可以配置播放器的网格布局,以适应不同的观看需求。硬

如何打造个性化大学生线上聊天交友系统?Java SpringBoot Vue教程,2025最新设计思路

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 | SpringBoot/SSM Python实战项目 | Django 微信小程序/安卓实战项目 大数据实战项目 ⚡⚡文末获取源码 文章目录

centOS7.0设置默认进入字符界面

刚装的,带有x window桌面,每次都是进的桌面,想改成自动进命令行的。记得以前是修改 /etc/inittab 但是这个版本inittab里的内容不一样了没有id:x:initdefault这一行而且我手动加上也不管用,这个centos 7下 /etc/inittab 的内容 Targets systemd uses targets which serve a simil

linux下TCP/IP实现简单聊天程序

可以在同一台电脑上运行,在一个终端上运行服务器端,在一个终端上运行客户端。 服务器端的IP地址要和本地的IP相同,并分配端口号,客户端的默认设置为本地,端口号自动分配。 服务器端: #include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.

Appium--界面元素选择

在操作界面元素前,我们需要进行手机与电脑的连接,这里介绍一个adb无线连接的方法: Adb无线连接功能 无线连接步骤(确保手机和电脑处于同一局域网) 1先以USB有线连接方式连接到计算机 2激活手机adb的无线服务: 命令行输入adb tcpip 5555(5555是端口号) 3计算机以无线方式连接到手机: 命令行输入adb connect 配置信息 desired_caps:这些键值对告诉ap

C/C++ 网络聊天室在线聊天系统(整理重传)

知识点: TCP网络通信 服务端的流程: 1.创建socket套接字 2.给这个socket绑定一个端口号 3.给这个socket开启监听属性 4.等待客户端连接 5.开始通讯 6.关闭连接 解释: socket:类似于接口的东西,只有通过这个才能跟对应的电脑通信。 每一台电脑都有一个IP地址,一台电脑上有多个应用,每个应用都会有一个端口号。 socket一般分为两种类型,一种是通讯,一种是监听

【YOLO 系列】基于YOLOV8的智能花卉分类检测系统【python源码+Pyqt5界面+数据集+训练代码】

前言: 花朵作为自然界中的重要组成部分,不仅在生态学上具有重要意义,也在园艺、农业以及艺术领域中占有一席之地。随着图像识别技术的发展,自动化的花朵分类对于植物研究、生物多样性保护以及园艺爱好者来说变得越发重要。为了提高花朵分类的效率和准确性,我们启动了基于YOLO V8的花朵分类智能识别系统项目。该项目利用深度学习技术,通过分析花朵图像,自动识别并分类不同种类的花朵,为用户提供一个高效的花朵识别

P11019 「LAOI-6」[太阳]] 请使用最新版手机 QQ 体验新功能

English statement. You must submit your code at the Chinese version of the statement. 题目描述 你的 QQ 收到了一条新消息!但是你很生气,因为你看不到别人在手机 QQ 上发送的超级表情。 消息形如一个字符串 S,包含且仅包含一个超级表情。具体地,我们将 S 的拼音采用驼峰命名法,可以化为如下形