国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android自定義布局實(shí)現(xiàn)仿qq側(cè)滑部分代碼

2019-10-23 18:32:57
字體:
供稿:網(wǎng)友

自定義布局實(shí)現(xiàn)仿qq側(cè)滑部分Android代碼,供大家參考,具體內(nèi)容如下

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

Android,qq,側(cè)滑

實(shí)現(xiàn)說明:

通過自定義布局實(shí)現(xiàn):

SlidingLayout繼承于 HorizontalScrollView

/*** Created by Administrator on 2017/3/29.*/public class SlidingLayout extends HorizontalScrollView{/** 左側(cè)右邊間距 */private float rightPadding;/** 左側(cè)菜單的寬度 */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);//計(jì)算左側(cè)菜單的寬度leftWidth = (int) (getScreenWidth() - rightPadding + 0.5f);}//獲取屏幕的寬度private float getScreenWidth() {return getResources().getDisplayMetrics().widthPixels;}@Override /** 布局解析完畢的時(shí)候 */protected void onFinishInflate() {super.onFinishInflate();ViewGroup container= (ViewGroup) getChildAt(0);if(container.getChildCount() > 2){throw new IllegalStateException("SlidingLayout中只能放兩個(gè)子View");}//獲取左側(cè)菜單viewleftView = (ViewGroup) container.getChildAt(0);//獲取主布局的ViwecontentView = (ViewGroup) container.getChildAt(1);//設(shè)置子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);}/*** 該方法在滑動(dòng)的時(shí)候會(huì)不斷的調(diào)用* @param l : left* @param t* @param oldl* @param oldt*/@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://手指抬起的時(shí)候判斷是否關(guān)閉int currentX = getScrollX();if (isOpenMeun) {if (currentX >= leftWidth / 2) {closeMeun();} else {openMeun();}//點(diǎn)擊關(guān)閉float x = ev.getX();if (x > leftWidth) {closeMeun();}return true;} else {//關(guān)閉狀態(tài)if (currentX < leftWidth / 2) {openMeun();} else {closeMeun();}return true;}}return super.onTouchEvent(ev);}/** 關(guān)閉菜單 */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[] = {"開通會(huì)員", "QQ錢包", "個(gè)性裝扮", "我的收藏", "我的相冊(cè)", "我的文件", "我的日程", "我的名片夾"}; @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); }}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 正宁县| 晋江市| 城口县| 宜春市| 仪陇县| 阜南县| 中超| 天全县| 湘潭县| 萍乡市| 隆回县| 兰西县| 邵武市| 依兰县| 阿拉善左旗| 韩城市| 师宗县| 新干县| 陕西省| 金坛市| 沂南县| 老河口市| 涞源县| 易门县| 志丹县| 来宾市| 八宿县| 泾阳县| 六盘水市| 朔州市| 大厂| 施秉县| 化州市| 永年县| 新疆| 江永县| 营山县| 舒兰市| 银川市| 扶绥县| 牙克石市|