快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

使用HorizontalScrollView怎么实现滑动页面时的缩放效果

本篇文章为大家展示了使用HorizontalScrollView怎么实现滑动页面时的缩放效果,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

创新互联建站专注于德阳网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供德阳营销型网站建设,德阳网站制作、德阳网页设计、德阳网站官网定制、成都微信小程序服务,打造德阳网络公司原创品牌,更为您提供德阳网站排名全网营销落地服务。

activity_main.xml :


 
 
 
  
 
  
 
   

在 item.xml 布局文件的右边有个 button 按钮,这些都在 HorizontalScrollView 的子组件当中。而 item.xml 究竟是怎样的布局也都不会影响到整个的滑动。

item.xml :



 
 
 
  

MainActivity.java :

package com.crazy.reduce;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
 
public class MainActivity extends Activity {
 
 private ReduceSideslip rs;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 
 rs = (ReduceSideslip)findViewById(R.id.reduce_lay);
 }
 
 public void toggleMenu(View v) {
 rs.reduce();
 }
}

自定义的 ReduceSideslip.java :   需要 nineoldandroids-2.4.0.jar 包,其下载地址

package com.crazy.reduce;
 
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
 
import com.nineoldandroids.view.ViewHelper;
 
public class ReduceSideslip extends HorizontalScrollView {
 
 private int mScreenWidth;  // 屏幕宽度
 private int mMnuRightPadding = 300;
 
 private int mMenuWidth; // 视图宽度(左边的视图)
 private int mHalfMenuWidth;
 
 private boolean isOpen; // 标记菜单是否打开
 private boolean once;  // 是否已经初始化回收菜单
 
 private ViewGroup mMenu; // 左边的视图
 private ViewGroup mContent; // 右边的视图
 
 public ReduceSideslip(Context context, AttributeSet attrs) {
  super(context, attrs);
  mScreenWidth = context.getResources().getDisplayMetrics().widthPixels;
 }
 
 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
 
  if (!once) {
   // 要与布局文件当中的一致
   LinearLayout temp = (LinearLayout)getChildAt(0);
   mMenu = (ViewGroup)temp.getChildAt(0);
   mContent = (ViewGroup)temp.getChildAt(1);
 
   mMenuWidth = mScreenWidth - mMnuRightPadding;
   mHalfMenuWidth = mMenuWidth/2;
   mMenu.getLayoutParams().width = mMenuWidth;
   mContent.getLayoutParams().width = mScreenWidth;
  }
  super.onMeasure(widthMeasureSpec, heightMeasureSpec);
 }
 
 // 在视图计算完自身及子视图的宽高后,重新排版
 @Override
 protected void onLayout(boolean changed, int l, int t, int r, int b) {
  super.onLayout(changed, l, t, r, b);
 
  if (changed) {
   // 隐藏菜单
   this.scrollTo(mMenuWidth, 0);
   once = true;
  }
 }
 
 public void reduce(){
  if (isOpen) {
   closeMenu();
  } else {
   openMenu();
  }
 }
 
 private void openMenu() {
  if (isOpen) {
   return;
  }
  // 和 scrollTo() 相似,但是要缓和些,
  // 不像 scrollTo() 直接移动过去
  this.smoothScrollTo(0, 0);
  isOpen = true;
 }
 
 private void closeMenu() {
  if (isOpen) {
   this.smoothScrollTo(mMenuWidth, 0);
   isOpen = false;
  }
 }
 
 @Override
 public boolean onTouchEvent(MotionEvent ev) {
  switch (ev.getAction()){
   case MotionEvent.ACTION_UP:  // 松开手
    int scrollX = getScrollX();   // 水平滑动的距离
    if (scrollX > mHalfMenuWidth) {
     this.smoothScrollTo(mMenuWidth, 0);
     isOpen = false;
    } else {
     this.smoothScrollTo(0, 0);
     isOpen = true;
    }
    return true;
  }
  return super.onTouchEvent(ev);
 }
 
 @Override
 protected void onScrollChanged(int l, int t, int oldl, int oldt) {
  super.onScrollChanged(l, t, oldl, oldt);
 
  // 左右视图切换时的渐变范围 (注意是 l 不是1(一))
  float scale = l*1.0f/mMenuWidth;  // 范围值 (0, 1)
  float leftScale = 1- 0.3f*scale;  // 范围值(0.7, 1)
  float rightScale = 0.8f + 0.2f*scale; // 范围值 (0.8, 1)
 
  ViewHelper.setScaleX(mMenu, leftScale);
  ViewHelper.setScaleY(mMenu, leftScale);
 
  // 往右滑动时,左边的视图逐渐变亮
  ViewHelper.setAlpha(mMenu, 0.6f + 0.4f * (1 - scale)); // (0.6, 1)
  // 往左滑动时,左边的视图不用移除屏幕左边界(可以不要) 
  ViewHelper.setTranslationX(mMenu, mMenuWidth * scale * 0.7f);
 
  ViewHelper.setScaleX(mContent, rightScale);
  ViewHelper.setScaleY(mContent, rightScale);
 }
}

上述内容就是使用HorizontalScrollView怎么实现滑动页面时的缩放效果,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。


文章名称:使用HorizontalScrollView怎么实现滑动页面时的缩放效果
URL地址:http://6mz.cn/article/igepid.html

其他资讯