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

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);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值