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