android自定义控件 侧滑菜单
来源:互联网 发布:海关数据销售 编辑:程序博客网 时间:2024/05/22 14:10
package com.example111.sxy.a08;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import java.util.ArrayList;public class MainActivity extends AppCompatActivity { private ListView lv_main; private ArrayList<MyBeans> myBeans; private MyAdapter myAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv_main = (ListView) findViewById(R.id.lv_main); myBeans = new ArrayList<>(); for (int i = 0;i<100;i++){ myBeans.add(new MyBeans("content"+i)); } myAdapter = new MyAdapter(); lv_main.setAdapter(myAdapter); } static class ViewHolder{ TextView item_context; TextView item_menu; } class MyAdapter extends BaseAdapter{ @Override public int getCount() { return myBeans.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if(convertView == null) { convertView = View.inflate(MainActivity.this,R.layout.item_main,null); viewHolder = new ViewHolder(); viewHolder.item_context = (TextView) convertView.findViewById(R.id.item_context); viewHolder.item_menu = (TextView) convertView.findViewById(R.id.item_menu); convertView.setTag(viewHolder); }else { viewHolder = (ViewHolder) convertView.getTag(); } final MyBeans myBean = myBeans.get(position); viewHolder.item_context.setText(myBean.getName()); viewHolder.item_context.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MyBeans m = myBeans.get(position); Toast.makeText(MainActivity.this,m.getName(),Toast.LENGTH_LONG).show(); } }); viewHolder.item_menu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SlideLayout slidelayout = (SlideLayout) v.getParent(); slidelayout.closeMenu(); myBeans.remove(myBean); notifyDataSetChanged(); } }); SlideLayout slideLayout = (SlideLayout) convertView; slideLayout.setOnStateChangeListenter(new MyOnStateChangeListenter()); return convertView; } } private SlideLayout slideLayout; class MyOnStateChangeListenter implements SlideLayout.OnStateChangeListenter{ @Override public void onClose(SlideLayout layout) { if(slideLayout == layout) { slideLayout = null; } } @Override public void onDown(SlideLayout layout) { if(slideLayout != null && slideLayout != layout) { slideLayout.closeMenu(); } } @Override public void onOpen(SlideLayout layout) { slideLayout = layout; } }}
package com.example111.sxy.a08;/** * Created by sxy on 2017/10/26. */public class MyBeans { private String name; @Override public String toString() { return "MyBeans{" + "name='" + name + '\'' + '}'; } public MyBeans(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; }}package com.example111.sxy.a08;import android.content.Context;import android.support.annotation.NonNull;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.widget.FrameLayout;import android.widget.Scroller;/** * Created by sxy on 2017/10/26. */public class SlideLayout extends FrameLayout { private int contextWidth; private int menuWidth; private int contextheight; private View contextView; private View menuView; private Scroller scroller; public SlideLayout(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); scroller = new Scroller(context); } @Override protected void onFinishInflate() { super.onFinishInflate(); contextView = getChildAt(0); menuView = getChildAt(1); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); contextWidth = contextView.getMeasuredWidth(); menuWidth = menuView.getMeasuredWidth(); contextheight = getMeasuredHeight(); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); menuView.layout(contextWidth,0,contextWidth+menuWidth,contextheight); } private float startx; private float starty; private float downX; private float downY; @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); switch (event.getAction()){ case MotionEvent.ACTION_DOWN: downX= startx = event.getX(); downY=starty=event.getY(); break; case MotionEvent.ACTION_MOVE: float endy = event.getY(); float endx = event.getX(); float distenceX = endx-startx; int sroX = (int) (getScrollX()-distenceX); if(sroX<0) { sroX=0; }else if(sroX>menuWidth) { sroX = menuWidth; } scrollTo(sroX,getScrollY()); float dx = Math.abs(endx-downX); float dy = Math.abs(endy-downY); if(dx>dy && dx>5) { getParent().requestDisallowInterceptTouchEvent(true); } startx = event.getX(); starty=event.getY(); break; case MotionEvent.ACTION_UP: int sx = getScrollX(); if(sx>menuWidth/2) { openMenu(); }else { closeMenu(); } break; } return true; } public void closeMenu() { int dx = 0-getScrollX(); scroller.startScroll(getScrollX(),getScrollY(),dx,getScrollY()); invalidate(); if(onStateChangeListenter != null) { onStateChangeListenter.onClose(this); } } public void openMenu() { int dx = menuWidth-getScrollX(); scroller.startScroll(getScrollX(),getScrollY(),dx,getScrollY()); invalidate(); if(onStateChangeListenter != null) { onStateChangeListenter.onOpen(this); } } @Override public void computeScroll() { super.computeScroll(); if(scroller.computeScrollOffset()) { scrollTo(scroller.getCurrX(),scroller.getCurrY()); invalidate(); } } @Override public boolean onInterceptTouchEvent(MotionEvent event) { boolean a = false; switch (event.getAction()){ case MotionEvent.ACTION_DOWN: downX= startx = event.getX(); downY=starty=event.getY(); if(onStateChangeListenter != null) { onStateChangeListenter.onDown(this); } break; case MotionEvent.ACTION_MOVE: float endy = event.getY(); float endx = event.getX(); float distenceX = endx-startx; float dx = Math.abs(endx-downX); float dy = Math.abs(endy-downY); if(dx>8) { a = true; } break; case MotionEvent.ACTION_UP: break; } return a; } public interface OnStateChangeListenter{ void onClose(SlideLayout layout); void onDown(SlideLayout layout); void onOpen(SlideLayout layout); } private OnStateChangeListenter onStateChangeListenter; public void setOnStateChangeListenter(OnStateChangeListenter onStateChangeListenter) { this.onStateChangeListenter = onStateChangeListenter; }}<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example111.sxy.a08.MainActivity"> <ListView android:id="@+id/lv_main" android:layout_width="match_parent" android:layout_height="match_parent" /></RelativeLayout><?xml version="1.0" encoding="utf-8"?><TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="60dp" android:background="#44000000" android:textColor="#000000" android:text="context" android:textSize="25sp" android:gravity="center"></TextView><?xml version="1.0" encoding="utf-8"?><com.example111.sxy.a08.SlideLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="60dp"> <include android:id="@+id/item_context" layout="@layout/item_context"/> <include android:id="@+id/item_menu" layout="@layout/item_menu"/></com.example111.sxy.a08.SlideLayout><?xml version="1.0" encoding="utf-8"?><TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="60dp" android:background="#22000000" android:textColor="#ff0000" android:text="Delete" android:textSize="25sp" android:gravity="center"></TextView>
阅读全文
0 0
- Android:自定义侧滑菜单控件
- android自定义控件 侧滑菜单
- Android自定义控件6----继承ViewGroup自定义侧滑菜单
- android控件-自定义菜单
- android 自定义菜单控件
- 自定义控件:侧滑菜单
- 自定义控件-侧滑菜单
- Android 自定义控件打造史上最简单的侧滑菜单
- Android自定义控件——侧滑菜单
- Android 自定义控件打造史上最简单的侧滑菜单
- Android QQ5.0 侧滑菜单效果 自定义控件
- Android 自定义控件打造史上最简单的侧滑菜单
- Android 自定义控件打造史上最简单的侧滑菜单
- Android 自定义控件打造史上最简单的侧滑菜单
- Android 自定义控件打造史上最简单的侧滑菜单
- Android 自定义控件打造史上最简单的侧滑菜单
- Android 自定义控件打造史上最简单的侧滑菜单
- Android 自定义控件打造史上最简单的侧滑菜单
- mongodb中批量将时间戳转变通用日期格式
- “集百度AI技术之大成的终极硬件形态”发布
- SQL中的数据类型
- python数字图像处理笔记
- Groq新进展!谷歌TPU原班人马明年发布首款AI芯片
- android自定义控件 侧滑菜单
- 玩转Python-Scrapy(一):初探scrapy
- 看文本知语义:谷歌推一步到位自然语言理解框架SLING | 论文+代码
- Lyft无人车战略揭秘:两个团队并行,用百度Apollo,想定行业标准
- ionic侧滑菜单
- iOS-仿京东6位密码支付输入框
- 谷歌助手为App开发者开放大量新特性,新增音箱到手机的交互
- Centos6.4安装Git
- 泛互联网时代的政务服务,将会改变你的生活方式