Android实现QQ的侧滑置顶、删除

本博客向大家介绍Android实现QQ侧滑(删除、置顶等)功能。主要包括Android实现QQ侧滑(删除、置顶等)功能。本博客里面的全部依赖于Android里面的原生控件,不需要依赖于第三方架包来实现。

1.效果图展示

2.代码实现

目标结构

布局文件activity_main.xml

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:orientation="vertical"

android:layout_height="match_parent"

tools:context=".MainActivity">

android:id="@+id/line1"

android:layout_width="match_parent"

android:layout_height="match_parent"/>

布局文件item.xml

android:layout_width="match_parent"

android:layout_height="match_parent">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:scrollbars="none">

android:id="@+id/line0"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:gravity="center">

android:layout_width="75dp"

android:layout_height="75dp"

android:src="@mipmap/touxiang" />

android:id="@+id/title"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_weight="1"

android:gravity="center_vertical"

android:paddingLeft="15dp"

android:text=""

android:textSize="15dp" />

android:id="@+id/tv_zhidin"

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:background="#bfbfbf"

android:gravity="center"

android:paddingLeft="15dp"

android:paddingTop="10dp"

android:paddingRight="15dp"

android:paddingBottom="10dp"

android:text="置顶"

android:textColor="#fff" />

android:id="@+id/tv_shanchu"

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:background="#f00"

android:gravity="center"

android:paddingLeft="15dp"

android:paddingTop="10dp"

android:paddingRight="15dp"

android:paddingBottom="10dp"

android:text="删除"

android:textColor="#fff" />

自定义控件BaseHorizontalScrollView.java

package com.example.qqclient;

import android.content.Context;

import android.util.AttributeSet;

import android.view.MotionEvent;

import android.widget.HorizontalScrollView;

public class BaseHorizontalScrollView extends HorizontalScrollView {

private float mOffsetX,mOffsetY; //横纵偏移

private float mLastPostX,mLastPostY; //上次落点

private int mInterval;

public BaseHorizontalScrollView(Context context, AttributeSet attrs) {

super(context, attrs);

}

@Override

public boolean onInterceptHoverEvent(MotionEvent event) {

boolean result;

switch (event.getAction()){

case MotionEvent.ACTION_DOWN:

mOffsetX=0.0F;

mOffsetY=0.0F;

mLastPostX=event.getX();

mLastPostY=event.getY();

result=super.onInterceptHoverEvent(event);

break;

default://其余动作

float thisPosX=event.getX();

float thisPosY=event.getY();

mOffsetX+=Math.abs(thisPosX-mLastPostX);//X轴偏差

mLastPostY+=Math.abs(thisPosY-mLastPostY);//Y轴偏差

mLastPostX=thisPosX;

mLastPostY=thisPosY;

if (mOffsetX

result=true;

}else{

result=false;

}

break;

}

return result;

}

}

4.适配器MyAdapter.java

package com.example.qqclient;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.LinearLayout;

import android.widget.TextView;

import java.util.ArrayList;

import java.util.List;

public class MyAdapter extends BaseAdapter {

List list=new ArrayList<>();

Context context;

public void set(List list) {

this.list = list;

notifyDataSetChanged();

}

public MyAdapter(Context context) {

this.context = context;

}

@Override

public int getCount() {

return list.size();

}

@Override

public Object getItem(int i) {

return list.get(i);

}

@Override

public long getItemId(int i) {

return i;

}

@Override

public View getView(final int i, View view, ViewGroup viewGroup) {

View view1 = LayoutInflater.from(context).inflate(R.layout.item, null);

ViewHolder holder = new ViewHolder(view1);

LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) holder.title.getLayoutParams();

linearParams.width = MainActivity.widthPixels;// 控件的宽强制设置

holder.title.setLayoutParams(linearParams); //使设置好的布局参数应用到控件

holder.title.setText(list.get(i));

holder.tv_shanchu.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

list.remove(i);

notifyDataSetChanged();

}

});

holder.tv_zhidin.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

String title1=list.get(i);

list.remove(i);

list.add(0,title1);

notifyDataSetChanged();

}

});

return view1;

}

public static

class ViewHolder {

public View rootView;

public TextView title;

public TextView tv_zhidin;

public TextView tv_shanchu;

public LinearLayout line0;

public ViewHolder(View rootView) {

this.rootView = rootView;

this.title = (TextView) rootView.findViewById(R.id.title);

this.tv_zhidin = (TextView) rootView.findViewById(R.id.tv_zhidin);

this.tv_shanchu = (TextView) rootView.findViewById(R.id.tv_shanchu);

this.line0 = (LinearLayout) rootView.findViewById(R.id.line0);

}

}

}

主文件MainActivity.java

package com.example.qqclient;

import android.os.Bundle;

import android.view.Display;

import android.widget.ListView;

import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

private ListView line1;

//获得屏幕的宽度

public static int widthPixels=0;

MyAdapter adapter;

private ArrayList list=new ArrayList<>();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

//获得屏幕宽度

Display display = getWindowManager().getDefaultDisplay();

widthPixels = display.getWidth()-45;

initDate();

}

private void initDate() {

list.add("小明");

list.add("小红");

list.add("小亮");

list.add("小花");

adapter=new MyAdapter(MainActivity.this);

adapter.set(list);

line1.setAdapter(adapter);

}

private void initView() {

line1 = (ListView) findViewById(R.id.line1);

}

}

android qq侧滑,Android实现QQ的侧滑置顶、删除相关推荐

  1. autojs模仿qq消息列表侧拉置顶删除菜单

    牙叔教程 简单易懂 效果展示 思路 使用安卓qq可知, 消息列表每次只能有一个侧拉菜单被打开 autojs版本 9.0.4 你将学到以下知识点 RecyclerView的基本使用 拦截rv的触摸事件 ...

  2. android备忘录_苹果备忘录怎样把内容置顶?有置顶功能的备忘录便签

    苹果手机是很多人都比较喜欢的一个电子设备,人们之所以喜欢它,除了它精致的外观之外,还有更大一部分原因是因为它的性能非常强大,并且有很多实用的工具软件可以安装,备忘录就是其中一种.苹果备忘录怎样把内容置 ...

  3. Android集成环信IM,实现聊天置顶功能

    首先是,要实现置顶聊天,那么我们就要有两个List集合,一个是置顶的,一个是不是置顶的.这里,环信给出了EMConversation的一个方法,带大家看看技术文档. 看下这个文档里面说的非常清楚,也就 ...

  4. qq五笔linux,QQ五笔 - 五笔小字典 QQ绑定很实用

    九. 智能调频.空码检索.词序固定 在QQ五笔中还有一些小亮点,比如它可以根据"最近输入"."输入次数"对候选词排序.同时为了加快检索速度,默认只在常用字库(G ...

  5. android环信删除会话列表,关于会话列表的置顶聊天

    最近搞完了置顶聊天,来写篇文章分享下经验. 其实刚刚开始 ,我自己在想,我是不是要去做出类似于QQ那种的滑动,然后显示置顶和删除. 图1 我就开始写,写完了之后然后去置顶,取消置顶,其实是有用的,但是 ...

  6. Android自定义View之仿QQ侧滑菜单实现

    最近,由于正在做的一个应用中要用到侧滑菜单,所以通过查资料看视频,学习了一下自定义View,实现一个类似于QQ的侧滑菜单,顺便还将其封装为自定义组件,可以实现类似QQ的侧滑菜单和抽屉式侧滑菜单两种菜单 ...

  7. 名片夹android布局代码,Android自定义布局实现仿qq侧滑部分代码

    自定义布局实现仿qq侧滑部分Android代码,供大家参考,具体内容如下 实现说明: 通过自定义布局实现: SlidingLayout继承于 HorizontalScrollView /** * Cr ...

  8. android开发之仿QQ拖拽界面效果(侧滑面板)

    仿QQ拖拽界面效果(侧滑面板),我们一般继承Layout,不会直接去继承ViewGroup,而是继承FrameLayout,为什么五大布局我们偏偏只继承FrameLayout呢? 第一,FrameLa ...

  9. android仿qq布局,Android自定义布局实现仿qq侧滑部分代码

    自定义布局实现仿qq侧滑部分android代码,供大家参考,具体内容如下 实现说明: 通过自定义布局实现: slidinglayout继承于 horizontalscrollview /** * cr ...

  10. Android的SwipeToDismiss第三方开源框架模拟QQ对话列表侧滑删除,置顶,将头像图片圆形化处理。...

      <Android SwipeToDismiss:左右滑动删除ListView条目Item> Android的SwipeToDismiss是github上一个第三方开源框架(github ...

最新文章

  1. 从零开始,教你征战Kaggle竞赛
  2. Google综述:细数Transformer模型的17大高效变种
  3. 构建未来情报体系—— AI及大数据时代情报分析人员的战略价值
  4. 爬虫框架Scrapy的第一个爬虫示例入门教程
  5. boost::geometry::discrete_frechet_distance用法的测试程序
  6. 使用FIT2CLOUD在青云QingCloud快速部署和管理Kubernetes集群
  7. 10.15 lzxkj
  8. java课程设计拼图_基于Java拼图游戏的设计与实现(含录像)
  9. java设计模式之备忘_[译]Java 设计模式之备忘录
  10. 为什么MySQL不建议使用NULL作为列默认值?
  11. React Native 首次加载白屏优化
  12. Android系统信息获取 之九:TelephonyManager类
  13. Altium Designer 入门教程
  14. 配置修改Tomcat端口
  15. UVA-816 Abbott's Revenge (bfs)
  16. 如何将Excel一页转PDF变多页?好用的PDF转换工具推荐
  17. 小明一家过桥_「小明一家人过桥问题」如何用编程解决?
  18. redis中 Could not get a resource from the pool 异常解决
  19. 登录TOM163VIP邮箱的几种方式,以及常见问题有哪些?
  20. 如何将谷歌浏览器的插件下载到本地?

热门文章

  1. 动态范围Bitmap的参考实现
  2. 完全解析为什么0.1+0.2=0.30000000000000004
  3. 从零开始的RVOS: Referring Video Object Segmentation
  4. 公司新来了个软件测试工程师,一副毛头小子的样儿,哪想到是新一代卷王...
  5. POJ 3295.Tautology
  6. 垃圾短信分类java_有了这个神器,快速告别垃圾短信邮件
  7. 生活大爆炸第六季 那些精妙的台词翻译
  8. c语言日期计算器程序代码,用C语言写一个日期计算器
  9. python 实现日期计算器
  10. EM2 MP1 Vowel and Consonant Teacher:Ashley