本文主要是介绍仿QQ聊天界面里边的相册(QQ相册),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近因为项目需求,需要做一个QQ聊天界面里边的相册功能,那是个什么功能?难道和微信不一样???试了一下,厉害了,我的哥,竟然可以滑动选择图片,这是咋弄的,还可以这么玩,好奇!!!必须给整出来,就算没有这个需求了,也要整出来,所有意思啊
百度,Google,找了半天,只有一篇,CSDN上边有一篇http://blog.csdn.net/chendong_/article/details/52473160,就是这个了,还有github上边也有一篇,https://github.com/chendongMarch/SlidingCheckSample,应该是同一个人的,毕竟项目名字是一样的,其他的没注意看,不管他,下载下来看看再说
虽然有点出入吧,但是大体上基本没错,运行效果
演示视频
-
普通模式演示视频
-
九宫格模式演示视频
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相册)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!