android 使用ViewDragHelper高仿QQ主界面效果

android开发之仿QQ拖拽界面效果(侧滑面板) 仿QQ拖拽界面效果(侧滑面板),我们一般继承Layout,不会直接去继承ViewGroup,而是继承FrameLayout,为什么五大布局我们偏偏只继承FrameLayout呢? 第一,FrameLayout继承ViewPager; 第二,其他四大布局比FrameLayout多做了onDraw,onLayout,FrameLayout只有层级上下关系,没有位置的相对关系,而我们自定义控制对位置的相对 阅读详情

互联网有二家大公司做的产品是最好的,至少个人是这么认为的,一个是腾讯,一个是网易,今天就使用android提供一个强大的类ViewDragHelper来实现QQ主界面这个效果,不要告诉我你不知道这个效果,除非你不用qq,那么基本判断你还是生活在老毛的时代,


在做这个效果中遇到一个问题就是不能让菜单的layout移动,当时是这么写的

<span style="font-size:18px;">@Override
			public int clampViewPositionHorizontal(View child, int left, int dx) {
				if(child==mainView){
					if(left<=0) left=0;
					if(left>moveRange)left=moveRange;
				}
				return left;
			}</span>
<span style="font-size:18px;">想在这个方法中做些判断,如果滑动的是菜单的layout就怎么样,后来发现这样不行,于是乎:就想到了在onViewPositionChanged()方法中困定死这个菜单layout的位置,
menuView.layout(0, 0, menuView.getMeasuredWidth(), menuView.getMeasuredHeight());</span>



<span style="font-size:18px;">下面图是对这个总结:</span>
<img src="https://img-blog.youkuaiyun.com/20160309171349856?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<span style="font-size:18px;">现在把代码全部贴上来:</span>
<span style="font-size:18px;">MainActivity.java
</span>
<span style="font-size:18px;"><pre name="code" class="html">package com.slidmenu;
import com.slidmenu.view.MainViewGroup;
import com.slidmenu.view.SildMenuView;
import com.slidmenu.view.SildMenuView.onDragSlideMenuListener;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
	private SildMenuView slidmenu;
	private MainViewGroup ll_main_root;
	private ImageView iv_head;
	private ListView menu_listview,main_listview;
	private String[] menu_contents = {"体育新闻","今日头条","娱乐新闻","民生新闻","小品","相声","推荐"};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		iv_head = (ImageView) findViewById(R.id.iv_head);
		ll_main_root = (MainViewGroup) findViewById(R.id.ll_main_root);
		slidmenu = (SildMenuView) findViewById(R.id.slidmenu);
		menu_listview = (ListView) findViewById(R.id.menu_listview);
		main_listview = (ListView) findViewById(R.id.main_listview);
		main_listview.setAdapter(new MainAdapter());
		menu_listview.setAdapter(new MenuAdapter());
		ll_main_root.setSildMenuView(slidmenu);
		//主界面上面的小人头
		iv_head.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				if(slidmenu.isOpen()){
					slidmenu.close();
				}else{
					slidmenu.open();
				}
			}
		});
		slidmenu.setListener(new onDragSlideMenuListener() {
			@Override
			public void open() {
				
			}
			@Override
			public void close() {
				
			}
		});
	}
	
	class MainAdapter extends BaseAdapter{
		@Override
		public int getCount() {
			return 20;
		}

		@Override
		public Object getItem(int position) {
			return position;
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			TextView tv = new TextView(getApplicationContext());
			tv.setText("qq号---123456789");
			tv.setGravity(Gravity.CENTER);
			tv.setTextColor(Color.BLACK);
			AbsListView.LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,80);
			tv.setLayoutParams(params);
			return tv;
		}
	}
	class MenuAdapter extends BaseAdapter{
		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return menu_contents.length;
		}

		@Override
		public Object getItem(int position) {
			return position;
		}

		@Override
		public long getItemId(int position) {
			return position;
		}
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			TextView tv = new TextView(getApplicationContext());
			tv.setText(menu_contents[position]);
			tv.setGravity(Gravity.CENTER_VERTICAL);
			tv.setTextColor(Color.BLUE);
			AbsListView.LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,80);
			tv.setLayoutParams(params);
			return tv;
		}
	}
	//处理当slidemenu是打开状态的时候按返回键 是关闭状态 否则就退出栈
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if(keyCode==KeyEvent.KEYCODE_BACK){
			if(slidmenu.isOpen()){
				slidmenu.close();
				return false;
			}
		}
		return super.onKeyDown(keyCode, event);
	}
}
</span>
MainViewGroup.java 自定义内容区layout


<span style="font-size:18px;"><pre name="code" class="html">package com.slidmenu.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.LinearLayout;

public class MainViewGroup extends LinearLayout {
	private SildMenuView sildMenuView ;
	public MainViewGroup(Context context, AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
	}

	public MainViewGroup(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	public MainViewGroup(Context context) {
		super(context);
	}
	
	public void setSildMenuView(SildMenuView sildMenuView){
		this.sildMenuView = sildMenuView;
	}
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		if(sildMenuView!=null&&sildMenuView.isOpen()){//打开状态
			if(event.getAction()==MotionEvent.ACTION_UP){
				sildMenuView.close();
			}
			return true;
		}
		return super.onTouchEvent(event);
	}
	@Override
	public boolean onInterceptTouchEvent(MotionEvent ev) {
		if(sildMenuView!=null&&sildMenuView.isOpen()){//打开状态
			return true;//自己处理
		}
		return super.onInterceptTouchEvent(ev);
	}
}
</span>

SildMenuView.java

<span style="font-size:18px;"><pre name="code" class="html">package com.slidmenu.view;
import com.nineoldandroids.animation.FloatEvaluator;
import com.nineoldandroids.view.ViewHelper;
import android.content.Context;
import android.support.v4.view.ViewCompat;
import android.support.v4.widget.ViewDragHelper;
import android.support.v4.widget.ViewDragHelper.Callback;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;
public class SildMenuView extends FrameLayout {
	private static final String TAG = SildMenuView.class.getSimpleName();
	private ViewDragHelper mViewHelper;
	private View menuView;
	private View mainView;
	private int moveRange;
	private FloatEvaluator floatEvaluator;
	private onDragSlideMenuListener listener;
	public enum  state {OPEN,CLOSE};
	state  currentState = state.CLOSE;
	public void setListener(onDragSlideMenuListener listener) {
		this.listener = listener;
	}
	public SildMenuView(Context context, AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
		init();
	}
	public SildMenuView(Context context, AttributeSet attrs) {
		this(context, attrs,0);
	}
	public SildMenuView(Context context) {
		this(context,null);
	}
	private void init() {
		floatEvaluator = new FloatEvaluator();
		mViewHelper = ViewDragHelper.create(this, new Callback() {
			@Override
			public boolean tryCaptureView(View arg0, int arg1) {
				return true;
			}
			/**
			 * 主要处理的是mainview左右滑动的边界限制
			 */
			@Override
			public int clampViewPositionHorizontal(View child, int left, int dx) {
				if(child==mainView){
					if(left<=0) left=0;
					if(left>moveRange)left=moveRange;
				}
				return left;
			}
			//表示竖直方向不移动
			@Override
			public int clampViewPositionVertical(View child, int top, int dy) {
				return 0;
			}
			@Override
			public int getViewHorizontalDragRange(View child) {
				return moveRange;
			}
			@Override
			public int getViewVerticalDragRange(View child) {
				return super.getViewVerticalDragRange(child);
			}

			@Override
			public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) {
				super.onViewPositionChanged(changedView, left, top, dx, dy);
				if(changedView==menuView){
					menuView.layout(0, 0, menuView.getMeasuredWidth(), menuView.getMeasuredHeight());
					int mainLeft = mainView.getLeft()+dx;
					if(mainLeft>moveRange){
						mainLeft=moveRange;
					}
					mainView.layout(mainLeft, mainView.getTop()+dy, mainView.getRight()+dx, mainView.getBottom()+dy);
					//实时计算mainview移动的百分比
				}
				float movePercent =(float) mainView.getLeft()/moveRange;
				setAnim(movePercent);
				Log.e(TAG, "movePercent--->"+movePercent);
				if(movePercent==0&¤tState!=state.CLOSE){
					if(listener!=null){
						currentState=state.CLOSE;
						listener.close();
					}
				}
				if(movePercent==1&¤tState!=state.OPEN){
					if(listener!=null){
						currentState=state.OPEN;
						listener.open();
					}
				}
			}
			/**
			 * 实现当收松开的状态  mainView 如果滑动到大于menu宽的一半 mainView,menuView就全部显示,
			 */
			@Override
			public void onViewReleased(View releasedChild, float xvel, float yvel) {
				super.onViewReleased(releasedChild, xvel, yvel);
				if(mainView!=null){
					if(mainView.getLeft()>moveRange/2){//向右
						smoothSlideViewTo(mainView, moveRange, 0);
					}else{//向左
						smoothSlideViewTo(mainView, 0, 0);
					}
				}
			}
		});
	}
	public void close(){
		smoothSlideViewTo(mainView, 0, 0);
	}
	public void open(){
		smoothSlideViewTo(mainView, moveRange, 0);
	}
	protected void setAnim(float movePercent) {
		//1表示起始值 0.9表示最小缩放到的值   
		ViewHelper.setScaleX(mainView, floatEvaluator.evaluate(movePercent,1f,0.9f));
		ViewHelper.setScaleY(mainView, floatEvaluator.evaluate(movePercent,1f,0.9f));
		
		//移动menuView
		ViewHelper.setTranslationX(menuView,floatEvaluator.evaluate(movePercent,-menuView.getMeasuredWidth()/2,0));
		//放大menuView
		ViewHelper.setScaleX(menuView,floatEvaluator.evaluate(movePercent,0.5f,1f));
		ViewHelper.setScaleY(menuView,floatEvaluator.evaluate(movePercent,0.5f,1f));
		//改变menuView的透明度
		ViewHelper.setAlpha(menuView,floatEvaluator.evaluate(movePercent,0.3f,1f));
	}
	public void smoothSlideViewTo(View view,int left,int top){
		mViewHelper.smoothSlideViewTo(view, left, top);
		refreshUI();
	}
	public void refreshUI(){
		ViewCompat.postInvalidateOnAnimation(this);
	}
	@Override
	public void computeScroll() {
		if(mViewHelper.continueSettling(true)){
			refreshUI();
		}
	}
	@Override
	protected void onFinishInflate() {
		super.onFinishInflate();
		menuView = getChildAt(0);
		mainView = getChildAt(1);
	}
	@Override
	protected void onSizeChanged(int w, int h, int oldw, int oldh) {
		super.onSizeChanged(w, h, oldw, oldh);
		moveRange = (int) (getMeasuredWidth()*0.6);
	}
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		mViewHelper.processTouchEvent(event);
		return true;
	}
	@Override
	public boolean onInterceptTouchEvent(MotionEvent ev) {
		return mViewHelper.shouldInterceptTouchEvent(ev);
	}
	
	public interface onDragSlideMenuListener{
		void close();
		void open();
	}
	/**
	 * 判断slidemenu是否打开状态
	 * @return
	 */
	public boolean isOpen(){
		boolean temp = false;
		if(currentState==state.CLOSE){
			temp = false;
		}
		if(currentState==state.OPEN){
			temp  = true;
		}
		return temp;
	}
	public state getCurrentState() {
		return currentState;
	}
}
</span>

布局文件如下:

<span style="font-size:18px;">activity_main</span>
<span style="font-size:18px;"><pre name="code" class="html"><com.slidmenu.view.SildMenuView
    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"
    android:background="@drawable/bg"
    android:id="@+id/slidmenu"
   >
    <include layout="@layout/layout_menu"/>
    <include layout="@layout/layout_main"/>
</com.slidmenu.view.SildMenuView>
</span>


左侧菜单layout_menu.xml

<span style="font-size:18px;"><pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:orientation="vertical"
    android:paddingLeft="20dp"
    android:paddingTop="50dp" >
    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@drawable/head" />
    <ListView
        android:id="@+id/menu_listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="5dp"
        android:listSelector="@android:color/transparent" >
    </ListView>

</LinearLayout></span>

内容区布局:layout_main.xml

<span style="font-size:18px;"><pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<com.slidmenu.view.MainViewGroup xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/ll_main_root"
    android:background="#ffffff"
    android:orientation="vertical" >
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#18B4ED" >
        <ImageView
            android:layout_width="30dp"
            android:layout_marginLeft="15dp"
            android:id="@+id/iv_head"
            android:layout_height="30dp"
            android:layout_centerVertical="true"
            android:background="@drawable/head" />
    </RelativeLayout>
    <ListView android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/main_listview"
        android:cacheColorHint="#00000000"
        android:dividerHeight="0.8dp"
        android:divider="#e5e5e5"
        android:listSelector="@android:color/transparent"></ListView>

</com.slidmenu.view.MainViewGroup></span>

使用到的第三方jar:

<span style="font-size:18px;">nineoldandroids-2.4.0.jar
</span>
<span style="font-size:18px;"></pre><pre code_snippet_id="1603295" snippet_file_name="blog_20160309_18_5725033" name="code" class="html"></span>



android仿qq主界面 android仿QQ主界面,非常有利于初学者学习 立即下载

相关推荐

Android高仿QQ搜索框滑动功能

高仿android版QQ搜索框向上滑动动画效果,代码简单易懂。。。自己在项目中遇到这个功能,网上查不到,此demo希望帮助一些需要的童鞋少走弯路。。。

Android仿QQ主界面-------完善篇

在我前面的博文中,做出了仿QQ主界面的主要工作,博文地址:Android仿QQ主界面。   但是在那一篇中还有一个不起眼的地方没做,今天就完善它。   今天要实现在文字下面来个ImageView,实现动画。先看看效果图。   在滑动页面的时候,下面的ImageView会滑动。好了,开始正题。 1.布局文件main.xml 先看代码: <LinearLayout xmlns:a

卡尔 8125

仿QQ主界面选项卡

这是QQ主界面的选项卡的自定义实现

android 高仿qq5.0,Android基于ViewDragHelper仿QQ5.0侧滑界面效果

QQ5.0侧滑效果实现方案有很多方式,今天我们使用ViewDragHelper来实现一下。先上效果图:①自定义控件SlidingMenu继承FrameLayout,放在FrameLayout上面的布局一层叠着者一层,通过getChildAt()可以很方便的获取到任意一层,进而控制此布局的变化。public class SlidingMenu extends FrameLayout {private...

weixin_39712611的博客 173

数据中心光模块升级实录:从200G QSFP56到400G QSFP-DD的踩坑指南

本文记录了数据中心从200G QSFP56升级至400G QSFP-DD光模块的完整实战经验。文章深入剖析了升级过程中面临的兼容性、链路预算、布线、散热与功耗管理等核心挑战,并提供了具体的解决方案与排坑指南,为高速网络升级提供了宝贵的实践参考。

butter的博客 479

IBM System x3650 M5 IMM配置

1、IMM基本介绍 IMM,全称是Intel Mobile Module是IBM服务器上的集成管理模块,该模块是独立于服务器系统,可以通过一个单独的IP地址,使用Web和虚拟端口方式直接启动、停止和管理远程服务器,即使主板、处理器或者内存故障导致主机无法启动,也依然可以远程管理服务器,可以远程直接操作启动画面和服务器工作界面。 2、IP地址配置 2.1 通过Web方式修改IP地址 IBM服...

血饮渊虹的博客 4万+

彷QQ侧滑菜单动画实现效果—ViewDragHelper

1、介绍自定义一款的彷QQ侧滑菜单,实现一系列动画展示效果。 无论拿到那种UI的界面,第一步就我们要去分析这个界面的组合形成部分。 实现效果: 1、菜单布局UI和主页面UI的布局。 2、设置NO_TITLE_BAR去除标题。 3、菜单栏滑动和主页滑动,互相伴随效果,以及限制了界面的移动范围。 4、在界面滑动的时候,菜单栏颜色由暗变亮的效果。

程序病毒小队的博客 1289

LLCE、PFE模块,二层交换/桥接的通用学习转发机制

NXP 文档里给出的正式全称如下:面向 CAN/CAN-FD、LIN、FlexRay 的“低延迟通信引擎”,用多核 M0 固件做报文收发、过滤、路由,把主 CPU 中断负荷降到几乎 0。“数据包转发引擎”,负责以太网帧的分类、修改、转发、VLAN/NAT/IPsec 等 offload,支持 2 Gbit/s 线速且主机负载 ≈0。两者都跑各自固件,通过内部 AXI 桥可互连,实现“CAN→ETH”零主核参与的硬件级网关功能。是它们都集成在。

qq_25461777的博客 1303

Android实现类似QQ的滑动删除效果

Android实现QQ的滑动删除效果

大头鬼Bruce 2万+

高精度SAR ADC设计实战:从建模到版图的16位1MSPS实现

本文详细介绍了16位1MSPS高精度SAR ADC的设计过程,从建模到版图实现的完整流程。重点探讨了分段电容阵列设计、校准算法实现及版图匹配等关键技术,展示了如何在180nm工艺下实现92.5dB SNDR和109.6dB SFDR的高性能指标。文章特别强调了整数桥接电容设计对提升匹配精度的关键作用,为高精度模数转换器设计提供了实用参考。

weixin_33724046的博客 436

从零开始搭建属于自己的语音识别API服务器(ASRT开源项目)

材料准备 云服务器 (本人使用的的是阿里云服务器 Ubuntu(Linux操作系统)) 环境搭建 1. Python 3.7 话不多说直接上代码 sudo su yum -y install git yum -y install gcc yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-deve

zhi_qian的博客 5647

android实现qq6.x右滑设置界面,Android使用ViewDragHelper实现QQ6.X最新版本侧滑界面效果实例代码...

(一).前言:这两天QQ进行了重大更新(6.X)尤其在UI风格上面由之前的蓝色换成了白色居多了,侧滑效果也发生了一些变化,那我们今天来模仿实现一个QQ6.X版本的侧滑界面效果。今天我们还是采用神器ViewDragHelper来实现.本次实例具体代码已经上传到下面的项目中,欢迎各位去star和fork一下。https://github.com/jiangqqlmj/DragHelper4QQFast...

weixin_34254044的博客 745

Android HCE模拟NFC标签:实现跨设备NDEF数据共享

本文详细介绍了Android HCE技术如何模拟NFC标签实现跨设备NDEF数据共享。通过核心代码实现和标准AID配置,使手机能够被第三方NFC应用直接读取,支持文本、网址、Wi-Fi配置等多种数据类型,大幅提升设备间数据交换的便捷性和兼容性。

pytorch8learner的博客 248

android关于ViewDragHelper的使用

ViewDragHelper是一个很方便的控制viewGroup中子view拖动动作的类。 可以实现很多效果,比如qq联系人列表,每一条可以横向滑动,出现删除按钮。 那么具体的使用方法是什么呢? 步骤1.创建 ViewDragHelper android.support.v4.widget.ViewDragHelper.create(ViewGroup forParent,

u014165633的博客 401

Vue - 解决 Property or method “__v_isRef“ is not defined on the instance but referenced(浏览器控制台报错,代码没错)

vue,vue2控制台报错,vue报错Propertyormethod"__v_isRef"isnotdefinedontheinstancebutreferenced,vue代码没问题,但是报错Propertyormethod"__v_isRef"isnotdefinedontheinstancebutreferenced,vue2如何解决报错,vue怎么解决报错问题,vue2Propertyormethod"__v_isRef"isnotdefi

🏆 前端领域优质创作者 4501

华为OD机试真题 新系统2026-04-15 C++ 实现【失灵的键盘】

有一个键盘有2个按键失灵了,按下这些键时会连续输出其他键对应的字符两次。具体如下: 1. 按下j键一次,屏幕上显示uu(两个连续的u);  按下b键一次,屏幕上显示t(两个连续的t) 2. u键和t键是好的,按下u键一次时,屏幕只会显示一次u(正常按键);按下t键一次时,屏幕只会显示一次t(正常按键) 3. 假定屏幕上连续显示两个t一定是按了一次b键,而不是两次t键;假定按键t之后不会紧接着按键b,即tttt转义为两个b,而不可能是tb

MISAYAONE的博客 210

安卓作业----慕课移动互联网作业9利用ViewDragHelper实现qq消息栏侧滑删除效果

此博客利用ViewDragHelper实现qq消息栏侧滑删除效果,同时这也是中国大学慕课移动终端应用开发的网课作业9,我会持续更新我的作业,如果有需要关注一下吧 说明 1.由于涉及到没有学过的内容,自学的时候参考了此篇博文和菜鸟教程,并在原基础上做了优化,并补充了几乎每个新知识的注释。 2.粘贴的时候注意包的正确导入,Message实体类不要和安卓的消息类混淆 3.注意修改布局文件item.xml...

baidu_41860619的博客 1910

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

QQ主页抽屉效果实现,有趣的弹簧动效

最近在测试机玩QQ的时候,留意到QQ主页上抽屉的动画效果,觉得挺有意思,今天就来实现以下QQ主页的抽屉动效。 抽屉打开的时候,可以看到主页是有两个动作: 主界面收缩 主界面四周圆角度数变大 接下来就一步步实现QQ抽屉打开时的效果。

qq_40987010的博客 3583

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android 仿qq5.0界面,Android基于ViewDragHelper仿QQ5.0侧滑界面效果

QQ5.0侧滑效果实现方案有很多方式,今天我们使用ViewDragHelper来实现一下。先上效果图:①自定义控件SlidingMenu继承FrameLayout,放在FrameLayout上面的布局一层叠着者一层,通过getChildAt()可以很方便的获取到任意一层,进而控制此布局的变化。public class SlidingMenu extends FrameLayout {private...

weixin_33971721的博客 262

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Android开发ViewDragHelper打造不一样的recyclerview

概述前面我有一篇是讲到了viewdraghelper,http://blog.youkuaiyun.com/sw950729/article/details/53352587。对viewdraghelper不了解,可以看完再说。有人说viewdraghelper这个不就是个手势处理类么,怎么打造不一样的recyclerview?不不不,不要小瞧所有的手势处理,包括那啥GestureDetector也是。但是本文

一个学渣走向android之路 6826

仿QQ侧滑效果ViewDragHelper

Google在其support库中为我们提供了DrawerLayout和SlidingPaneLayout两个布局来帮助我们开发侧边栏滑动的效果 ,在这两个布局背后有一个功能强大的ViewDragHelper类,通过ViewDragHelper基本可以实现各种不同的滑动,拖放的需求,是解决各种滑动问题的终极绝招。 下面就带大家用这个类实现一个仿QQ侧滑栏的效果 1.初始化ViewDr

程序员 1315

ViewDragHelper的妙用二 --QQ侧滑菜单的实现

好了,还是老规矩,先给出效果图,这里就绘制了一个简单框架,各位看官可以任意添加自己的东西。 我们目前认为所有的童鞋对于ViewDragHelper都有一定的了解,不了解的可以看一下我的上一篇博文。 强大的ViewDragHelper和ViewDragHelper的妙用 一 下面我来解释一下怎么使用我们的ViewDragHelper来实现这个效果 先给出我们的布局 <com.jeason.qqmenudemo.widget.SideslipLayout xmlns:android="http://s

大叔的愤怒,你驾驭不了 1539

ViewDragHelper实现仿qq列表滑动删除

实现过程概述实现qq列表侧滑删除,核心还是ViewDragHelper的实现。 关于ViewDragHelper的基础用法,我在另外一篇博客ViewDragHelper简介中已经介绍过了。如果不是特别了解ViewDragHelper,可以看看。 需要实现的ViewGroup是LinearLayout,基本的思路是:LinearLayout中的两个布局都是水平排列。

jialiang的博客 1005

android 仿qq侧拉,Android使用ViewDragHelper实现仿QQ6.0侧滑界面(一)

QQ是大家离不开的聊天工具,方便既实用,自从qq更新至6.0之后,侧滑由原来的划出后主面板缩小变成了左右平滑,在外观上有了很大的提升,于是我就是尝试理解下里面的各种逻辑,结合相关资料,研究研究。知道这里面的一个主要类是ViewDragHelper,那么首先我们要先来了解一下这个ViewDragHelper类,正所谓打蛇打七寸,我们就先来看看官方文档怎么介绍的,有什么奇特的功能。首先继承:java....

weixin_34776437的博客 288

android高仿qq源码,Android高仿QQ6.0侧滑删除实例代码

推荐阅读:先给大家分享一下,侧滑删除,布局也就是前面一个item,然后有两个隐藏的按钮(TextView也可以),然后我们可以向左侧滑动,然后显示出来,然后对delete(删除键)实现监听,就可以了哈。好了那就来看看代码怎么实现的吧。首先和之前一样自定义View,初始化ViewDragHelper:package com.example.removesidepull;import android....

weixin_32771631的博客 690
上一篇: android 使用ViewDragHelper轻松实现DrawerLayout和SlidMenu侧滑效果
下一篇: android 如何通过包名打开其他应用
zhoushenxian
博客等级 码龄12年 453粉丝 549原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值