大佬教程收集整理的这篇文章主要介绍了Android仿人人网滑动侧边栏效果,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
很多应用为了节省空间而又使界面能够充足的显示信息,大多数应用都采用了@L_673_1@的方式,如下图:
来说说它的思路,底下是两个或多个视图,分别通过控制它们的宽度、左边距来控制它们的显示,来看看代码
activity_main.xml
<LinearLayout xmlns:android="http://scheR_836_11845@as.android.com/apk/res/android" xmlns:tools="http://scheR_836_11845@as.android.com/tools" android:id="@+id/layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" tools:context=".MainActivity" > <LinearLayout android:id="@+id/menu" android:layout_width="match_parent" android:layout_height="match_parent" android:BACkground="@drawable/menu" > </LinearLayout> <LinearLayout android:id="@+id/content" android:layout_width="match_parent" android:layout_height="match_parent" android:BACkground="@drawable/content" > </LinearLayout> </LinearLayout>
MainActivity.java
public class MainActivity extends Activity implements OnTouchListener { private LinearLayout menu; private LinearLayout content; private LayoutParams menuparams; private LayoutParams contentParams; // menu完全显示时,留给content的宽度值。 private static final int menupadding = 80; // 分辨率 privatE int disPlayWidth; private float xDown; private float xMove; private Boolean mIsShow = false; private static final int speed = 50; @Override protected void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); requestWindowFeature(Window.FEATURE_NO_titlE); setContentView(R.layout.activity_main); disPlayWidth = getWindowManager().getDefaultDisplay().getWidth(); menu = (LinearLayout) findViewById(R.id.menu); content = (LinearLayout) findViewById(R.id.content); menuparams = (LayoutParams) menu.getLayoutParams(); contentParams = (LayoutParams) content.getLayoutParams(); findViewById(R.id.layout).setOnTouchListener(this); menuparams.width = disPlayWidth - menupadding; contentParams.width = disPlayWidth; showMenu(mIsShow); } @Override public Boolean onTouch(View v,MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: showMenu(!mIsShow); break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: break; } return true; } private void showMenu(Boolean isShow) { if (isShow) { mIsShow = true; menuparams.leftMargin = 0; } else { mIsShow = false; menuparams.leftMargin = 0 - menuparams.width; } menu.setLayoutParams(menuparams); } }
上述代码只是用两张图片代替了两个复杂的view(layout),你会发现,两个视图虽然可以切换,但没有动画的感觉,再加上要有拖动效果,所以,我们再给它加个平移时间段,看起来有动画的效果
package com.example.test; import android.app.Activity; import android.os.AsyncTask; import android.os.bundle; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.onClickListener; import android.view.View.onTouchListener; import android.view.Window; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; public class MainActivity extends Activity implements OnTouchListener,OnClickListener { private LinearLayout menu; private LinearLayout content; private LayoutParams menuparams; private LayoutParams contentParams; // menu完全显示时,留给content的宽度值。 private static final int menupadding = 80; // 分辨率 privatE int disPlayWidth; private float xDown; private float xMove; private Boolean mIsShow = false; private static final int speed = 50; @Override protected void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); requestWindowFeature(Window.FEATURE_NO_titlE); setContentView(R.layout.activity_main); disPlayWidth = getWindowManager().getDefaultDisplay().getWidth(); menu = (LinearLayout) findViewById(R.id.menu); menu.setOnClickListener(this); content = (LinearLayout) findViewById(R.id.content); content.setOnClickListener(this); menuparams = (LayoutParams) menu.getLayoutParams(); contentParams = (LayoutParams) content.getLayoutParams(); //findViewById(R.id.layout).setOnTouchListener(this); menuparams.width = disPlayWidth - menupadding; contentParams.width = disPlayWidth; showMenu(mIsShow); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.menu: new showMenuAsyncTask().execute(-50); break; case R.id.content: new showMenuAsyncTask().execute(50); break; } } @Override public Boolean onTouch(View v,MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: showMenu(!mIsShow); break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: break; } return true; } private void showMenu(Boolean isShow) { if (isShow) { mIsShow = true; menuparams.leftMargin = 0; } else { mIsShow = false; menuparams.leftMargin = 0 - menuparams.width; } menu.setLayoutParams(menuparams); } /** * *这是主要代码:模拟动画过程,也让我更熟悉了AsyncTask这玩意儿 * */ class showMenuAsyncTask extends AsyncTask<Integer,Integer,Integer> { @Override protected Integer doInBACkground(Integer... params) { int leftMargin = menuparams.leftMargin; //这里也是值得学习的地方,如果在平常,自己肯定又是这样写: // if(){ // while() // } // else if(){ // while() // } while (true) { leftMargin += params[0]; if (params[0] > 0 && leftMargin >= 0) { break; } else if (params[0] < 0 && leftMargin <= -menuparams.width) { break; } publishProgress(leftMargin); try { Thread.sleep(30); } catch (InterruptedException E) { e.printStackTrace(); } } return leftMargin; } @Override protected void onProgressupdate(Integer... values) { super.onProgressupdate(values); menuparams.leftMargin = values[0]; menu.setLayoutParams(menuparams); } @Override protected void onPostExecute(Integer result) { super.onPostExecute(result); menuparams.leftMargin = result; menu.setLayoutParams(menuparams); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
以上是大佬教程为你收集整理的Android仿人人网滑动侧边栏效果全部内容,希望文章能够帮你解决Android仿人人网滑动侧边栏效果所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。