本篇文章给大家分享的是有关如何在Android应用中实现一个侧滑功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实现说明:通过自定义布局实现:SlidingLayout继承于
本篇文章给大家分享的是有关如何在Android应用中实现一个侧滑功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
实现说明:
通过自定义布局实现:
SlidingLayout继承于 HorizontalScrollView
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");}//获取左侧菜单viewleftView = (ViewGroup) container.getChildAt(0);//获取主布局的ViwecontentView = (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);}@Overrideprotected 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);}@Overridepublic 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应用中实现一个侧滑功能,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。
--结束END--
本文标题: 如何在Android应用中实现一个侧滑功能
本文链接: https://www.lsjlt.com/news/224269.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0