Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android仿人人网滑动侧边栏效果大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

很多应用为了节省空间而又使界面能够充足的显示信息,大多数应用都采用了@L_673_1@的方式,如下图: 

Android仿人人网滑动侧边栏效果

     

Android仿人人网滑动侧边栏效果

来说说它的思路,底下是两个或多个视图,分别通过控制它们的宽度、左边距来控制它们的显示,来看看代码 

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,请注明来意。