全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

自定义布局实现仿qq侧滑部分Android代码,供大家参考,具体内容如下

源码DEMO地址:https://github.com/applelili/ImitationQQ

实现说明:

通过自定义布局实现:

SlidingLayout继承于 HorizontalScrollView

/**
* Created by Administrator on 2017/3/29.
*/

public class SlidingLayout extends HorizontalScrollView{

/** 左侧右边间距 */
private float rightPadding;
/** 左侧菜单的宽度 */
private int leftWidth;
private ViewGroup leftView;
private ViewGroup contentView;
private final Context context;
private boolean isOpenMeun = true;
private ImageView shadowView;

public SlidingLayout(Context context) {
this(context,null);
}

public SlidingLayout(Context context, AttributeSet attrs) {
this(context, attrs,0);
}

public SlidingLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.context = context;
//获取自定义的属性
TypedArray typedArray=context.obtainStyledAttributes(attrs,R.styleable.SlidingLayout);
rightPadding=typedArray.getDimension(R.styleable.SlidingLayout_rightPadding,80);
//计算左侧菜单的宽度
leftWidth = (int) (getScreenWidth() - rightPadding + 0.5f);
}

//获取屏幕的宽度
private float getScreenWidth() {
return getResources().getDisplayMetrics().widthPixels;
}

@Override /** 布局解析完毕的时候 */
protected void onFinishInflate() {
super.onFinishInflate();
ViewGroup container= (ViewGroup) getChildAt(0);
if(container.getChildCount() > 2){
throw new IllegalStateException("SlidingLayout中只能放两个子View");
}
//获取左侧菜单view
leftView = (ViewGroup) container.getChildAt(0);
//获取主布局的Viwe
contentView = (ViewGroup) container.getChildAt(1);
//设置子view 的宽度
leftView.getLayoutParams().width = leftWidth;
contentView.getLayoutParams().width = (int) getScreenWidth();

//移除父布局
container.removeView(contentView);
FrameLayout frameLayout=new FrameLayout(context);
frameLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));
frameLayout.addView(contentView);
//添加阴影
shadowView = new ImageView(context);
shadowView.setBackgroundColor(Color.parseColor("#99000000"));
frameLayout.addView(shadowView);
container.addView(frameLayout);
}

/**
* 该方法在滑动的时候会不断的调用
* @param l : left
* @param t
* @param oldl
* @param oldt
*/
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
float x=l*0.8f;//偏移量
leftView.setTranslationX(x);//平移
float color = 1 - l * 1.0f / leftWidth;
shadowView.setAlpha(color);
}

@Override
public boolean onTouchEvent(MotionEvent ev) {

switch (ev.getAction()) {
case MotionEvent.ACTION_UP://手指抬起的时候判断是否关闭
int currentX = getScrollX();
if (isOpenMeun) {
if (currentX >= leftWidth / 2) {
closeMeun();
} else {
openMeun();
}
//点击关闭
float x = ev.getX();
if (x > leftWidth) {
closeMeun();
}
return true;
} else {//关闭状态
if (currentX < leftWidth / 2) {
openMeun();
} else {
closeMeun();

}
return true;
}

}
return super.onTouchEvent(ev);

}
/** 关闭菜单 */
public void closeMeun(){
isOpenMeun = false;
smoothScrollTo(leftWidth,0);// 250ms
}

/** 打开菜单 */
public void openMeun(){
isOpenMeun = true;
smoothScrollTo(0,0);
}
}

attrs属性文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="SlidingLayout">
 <attr name="rightPadding" format="dimension"/>
</declare-styleable>
</resources>

布局方面

<?xml version="1.0" encoding="utf-8"?>
<com.example.myqq.SlidingLayout 
 xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 app:rightPadding="65dp"
 tools:context="com.example.myqq.MainActivity">


 <LinearLayout
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="horizontal">

  <include layout="@layout/left_main" />

  <include layout="@layout/right_main" />


 </LinearLayout>


</com.example.myqq.SlidingLayout>

activity

package com.example.myqq;

import android.animation.ObjectAnimator;
import android.annotation.TargetApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {
 private String strings[] = {"开通会员", "QQ钱包", "个性装扮", "我的收藏", "我的相册", "我的文件", "我的日程", "我的名片夹"};
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setState();
  setContentView(R.layout.activity_main);
  ListView listView= (ListView) findViewById(R.id.list_left);
  listView.setDividerHeight(0);
  listView.setAdapter(new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,strings));

  ImageView bgimg1= (ImageView) findViewById(R.id.bgimg);
  float currentY=bgimg1.getTranslationY();
  ObjectAnimator animator = ObjectAnimator.ofFloat(bgimg1, "translationY", currentY, -100, -40, currentY);
  animator.setDuration(5000);
  animator.setRepeatCount(ObjectAnimator.INFINITE);
  animator.start();

 }
 @TargetApi(20)
 private void setState() {
  WindowManager.LayoutParams params=new WindowManager.LayoutParams();
  params.flags=WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
  getWindow().setAttributes(params);

 }
}


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android  # qq  # 侧滑  # Android高仿QQ6.0侧滑删除实例代码  # Android使用ViewDragHelper实现仿QQ6.0侧滑界面(一)  # Android使用ViewDragHelper实现QQ6.X最新版本侧滑界面效果实例代码  # Android滑动优化高仿QQ6.0侧滑菜单(滑动优化)  # Android使用DrawerLayout实现仿QQ双向侧滑菜单  # 基于Android实现仿QQ5.0侧滑  # Android基于ViewDragHelper仿QQ5.0侧滑界面效果  # Android程序开发之使用Design包实现QQ动画侧滑效果和滑动菜单导航  # Android自定义view系列之99.99%实现QQ侧滑删除效果实例代码详解  # Android仿QQ6.0主页面侧滑效果  # 自定义  # 具体内容  # 大家多多  # 移除  # 判断是否  # 名片夹  # 偏移量  # getChildAt  # getChildCount  # container  # onFinishInflate  # void  # IllegalStateException  # View  # throw  # gt 


相关文章: 广德云建站网站建设方案与建站流程优化指南  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  ,南京靠谱的征婚网站?  大连 网站制作,大连天途有线官网?  网站制作公司排行榜,抖音怎样做个人官方网站  婚礼视频制作网站,学习*后期制作的网站有哪些?  如何获取免费开源的自助建站系统源码?  建站主机服务器选购指南:轻量应用与VPS配置解析  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  如何在企业微信快速生成手机电脑官网?  平台云上自主建站:模板化设计与智能工具打造高效网站  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  如何通过西部数码建站助手快速创建专业网站?  广州美橙建站如何快速搭建多端合一网站?  建站主机选购指南与交易推荐:核心配置解析  打鱼网站制作软件,波克捕鱼官方号怎么注册?  建站主机选购指南:核心配置与性价比推荐解析  javascript中的try catch异常捕获机制用法分析  如何用y主机助手快速搭建网站?  装修招标网站设计制作流程,装修招标流程?  表情包在线制作网站免费,表情包怎么弄?  制作公司内部网站有哪些,内网如何建网站?  如何用VPS主机快速搭建个人网站?  南京网站制作费用,南京远驱官方网站?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  ,有什么在线背英语单词效率比较高的网站?  javascript基本数据类型及类型检测常用方法小结  如何注册花生壳免费域名并搭建个人网站?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  如何通过虚拟机搭建网站?详细步骤解析  建站上市公司网站建设方案与SEO优化服务定制指南  如何在阿里云通过域名搭建网站?  简单实现Android文件上传  如何高效配置香港服务器实现快速建站?  建站之星代理平台如何选择最佳方案?  制作网站公司那家好,网络公司是做什么的?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  建站之星logo尺寸如何设置最合适?  建站之星后台密码遗忘?如何快速找回?  如何在万网开始建站?分步指南解析  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  家具网站制作软件,家具厂怎么跑业务?  Swift中循环语句中的转移语句 break 和 continue  如何在西部数码注册域名并快速搭建网站?  大型企业网站制作流程,做网站需要注册公司吗?  如何获取开源自助建站系统免费下载链接?  C#如何序列化对象为XML XmlSerializer用法  活动邀请函制作网站有哪些,活动邀请函文案?  MySQL查询结果复制到新表的方法(更新、插入) 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。