全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android编程实现的首页左右滑动切换功能示例

本文实例讲述了Android编程实现的首页左右滑动切换功能。分享给大家供大家参考,具体如下:

很多软件会选择左右滑动的主界面,实现方式也很多,这里的仅供参考,勿喷。

不多说什么了,相信大家看看代码就明白,自己也不善言辞,望大家谅解。

自定义接口,监听滑动翻页事件:

/** 滑动后翻页事件 */
public interface OnViewChangedListener {
  public void OnViewChanged(int viewId);
}

滑动翻页view(滑动翻页不是很灵敏):

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.PointF;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.widget.FrameLayout;
import android.widget.Scroller;
public class ScrollerView extends FrameLayout {
  private Scroller scroller;
  private Drawable drawable;
  private OnViewChangedListener listener;
  public ScrollerView(Context context) {
    this(context, null, 0);
  }
  public ScrollerView(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
  }
  public ScrollerView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    scroller = new Scroller(context);
  }
  private PointF last = new PointF();
  private final int TOUCH_SLOP = ViewConfiguration.get(getContext())
      .getScaledTouchSlop();
  @Override
  public boolean onInterceptTouchEvent(MotionEvent event) {
    final int x = (int) event.getX();
    boolean flag = false;
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
      last.x = x;
      break;
    case MotionEvent.ACTION_MOVE:
      final int deltaX = (int) (last.x - x);
      if (Math.abs(deltaX) > TOUCH_SLOP) {
        flag = true;
      }
      break;
    case MotionEvent.ACTION_UP:
      break;
    }
    return flag;
  }
  public boolean onTouchEvent(MotionEvent event) {
    final int x = (int) event.getX();
    final int width = getWidth();
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
      if (!scroller.isFinished()) {
        scroller.abortAnimation();
      }
      break;
    case MotionEvent.ACTION_MOVE:
      final int deltaX = (int) (last.x - x);
      if (Math.abs(deltaX) < TOUCH_SLOP) {
        break;
      }
      last.x = x;
      if (deltaX < 0) {
        if (getScrollX() > 0) {
          scrollBy(Math.max(-getScrollX(), deltaX), 0);
        }
      } else if (deltaX > 0) {
        final int availableToScroll = getChildAt(getChildCount() - 1)
            .getRight() - getScrollX() - getWidth();
        if (availableToScroll > 0) {
          scrollBy(Math.min(availableToScroll, deltaX), 0);
        }
      }
      break;
    case MotionEvent.ACTION_UP:
    case MotionEvent.ACTION_CANCEL:
      final OnViewChangedListener changedListener = listener;
      int dx = (getScrollX() + width / 2) / width;
      if (dx < 0) {
        dx = 0;
      }
      if (dx > getChildCount() - 1) {
        dx = getChildCount() - 1;
      }
      changedListener.OnViewChanged(dx);
      dx *= width;
      dx -= getScrollX();
      scroller.startScroll(getScrollX(), 0, dx, 0, Math.abs(dx) * 3);
      break;
    }
    invalidate();
    return true;
  }
  @Override
  protected void onLayout(boolean changed, int l, int t, int r, int b) {
    final int width = getWidth();
    final int count = getChildCount();
    int height = getHeight();
    int childLeft = 0;
    for (int i = 0; i < count; i++) {
      final View child = getChildAt(i);
      child.layout(childLeft, 0, childLeft + width, height);
      childLeft += width;
    }
  }
  @Override
  public void setBackgroundDrawable(Drawable d) {
    super.setBackgroundDrawable(drawable);
    drawable = d;
    super.setBackgroundDrawable(null);
  }
  @Override
  protected void dispatchDraw(Canvas canvas) {
    if (null != drawable) {
      drawable.setBounds(0, 0, getChildCount() * getWidth(), getHeight());
      drawable.draw(canvas);
    }
    super.dispatchDraw(canvas);
  }
  @Override
  public void computeScroll() {
    if (scroller.computeScrollOffset()) {
      scrollTo(scroller.getCurrX(), scroller.getCurrY());
      invalidate();
    }
  }
  /** 设置滑动后翻页事件监听 */
  public void setOnViewChangedListener(OnViewChangedListener listener) {
    this.listener = listener;
  }
}

主Activity:

import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.widget.ImageView;
public class MainActivity extends Activity implements OnViewChangedListener {
  private ScrollerView container;
  private View view_1, view_2;
  private ImageView imgLeft, imgRight;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);
    initView();
  }
  private void initView() {
    LayoutInflater inflater = LayoutInflater.from(this);
    container = (ScrollerView) findViewById(R.id.main_container);
    container.setOnViewChangedListener(this);
    imgLeft = (ImageView) findViewById(R.id.img_left);
    imgRight = (ImageView) findViewById(R.id.img_right);
    view_1 = inflater.inflate(R.layout.layout_view_1, null);
    view_2 = inflater.inflate(R.layout.layout_view_2, null);
    container.addView(view_1);
    container.addView(view_2);
  }
  @Override
  public void OnViewChanged(int viewId) {
    switch (viewId) {
    case 0:
      imgLeft.setImageResource(R.drawable.main_icon_check);
      imgRight.setImageResource(R.drawable.main_icon_normal);
      break;
    case 1:
      imgLeft.setImageResource(R.drawable.main_icon_normal);
      imgRight.setImageResource(R.drawable.main_icon_check);
      break;
    }
  }
}

附:完整实例代码点击此处本站下载

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android布局layout技巧总结》、《Android视图View技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。


# Android  # 首页  # 左右滑动  # 切换  # Android App中使用ViewPager+Fragment实现滑动切换效果  # Android开发之使用ViewPager实现图片左右滑动切换效果  # Android编程实现ViewPager多页面滑动切换及动画效果的方法  # Android实现界面左右滑动切换功能  # Android启动屏实现左右滑动切换查看功能  # Android实现微信首页左右滑动切换效果  # Android应用中利用ViewPager实现多页面滑动切换效果示例  # Android Listview上下拉动刷新tab滑动切换功能  # Android编程实现左右滑动切换背景的方法  # Android中的ViewPager视图滑动切换类的入门实例教程  # Android使用TabLayou+fragment+viewpager实现滑动切换页面效果  # Android ViewPager撤消左右滑动切换功能实现代码  # 翻页  # 进阶  # 相关内容  # 不多  # 不是很  # 感兴趣  # 给大家  # 自定义  # 点击此处  # 更多关于  # 解决方法  # 所述  # 程序设计  # 仅供参考  # 操作技巧  # 讲述了  # 说什么了  # defStyle  # attrs 


相关文章: 江苏网站制作公司有哪些,江苏书法考级官方网站?  如何通过FTP服务器快速搭建网站?  海南网站制作公司有哪些,海口网是哪家的?  如何用wdcp快速搭建高效网站?  *服务器网站为何频现安全漏洞?  简历在线制作网站免费版,如何创建个人简历?  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  广德云建站网站建设方案与建站流程优化指南  如何选择高效便捷的WAP商城建站系统?  建站主机选购指南与交易推荐:核心配置解析  如何在IIS中新建站点并解决端口绑定冲突?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  安云自助建站系统如何快速提升SEO排名?  平台云上自助建站如何快速打造专业网站?  怀化网站制作公司,怀化新生儿上户网上办理流程?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  如何快速生成高效建站系统源代码?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  重庆市网站制作公司,重庆招聘网站哪个好?  公众号网站制作网页,微信公众号怎么制作?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  网站制作员失业,怎样查看自己网站的注册者?  制作网页的网站有哪些,电脑上怎么做网页?  网站制作话术技巧,网站推广做的好怎么话术?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  建站主机功能解析:服务器选择与快速搭建指南  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  制作网站的公司有哪些,做一个公司网站要多少钱?  建站之星备案流程有哪些注意事项?  如何快速搭建高效WAP手机网站?  如何快速搭建高效服务器建站系统?  如何在建站之星绑定自定义域名?  如何在企业微信快速生成手机电脑官网?  如何在Ubuntu系统下快速搭建WordPress个人网站?  制作销售网站教学视频,销售网站有哪些?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?  定制建站流程解析:需求评估与SEO优化功能开发指南  建站主机选哪家性价比最高?  ppt制作免费网站有哪些,ppt模板免费下载网站?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  郑州企业网站制作公司,郑州招聘网站有哪些?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  制作电商网页,电商供应链怎么做?  如何规划企业建站流程的关键步骤? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。