LinearLayout遇到的问题——利用LinearLayout做横向滑动冲突

问题:当我添加两个TextView的时候,然后滑动,发现只生成了一个TextView。

就是

<?xml version="1.0" encoding="utf-8"?>
<com.maikefengchao.viewcompflict.HorzonScrollLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context="com.maikefengchao.viewcompflict.MainActivity">

    <TextView
        android:id="@+id/main_tv_first"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/holo_blue_light"
        android:text="我是第一页"
        android:gravity="center"/>

    <TextView
        android:id="@+id/main_tv_second"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/darker_gray"
        android:text="第二页"
        android:gravity="center"/>
</com.maikefengchao.viewcompflict.HorzonScrollLinearLayout>

activity_main

public class HorzonScrollLinearLayout extends LinearLayout {
    private int mLastX;
    private int mLastY;
    private int mCurrentX;
    private int mCurrentY;
    private int mTouchLastX;
    private int mTouchLastY;

    public HorzonScrollLinearLayout(Context context) {
        super(context);
    }

    public HorzonScrollLinearLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public HorzonScrollLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int scrollX = (int) event.getX();
        int scrollY = (int) event.getY();
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                break;
            case MotionEvent.ACTION_MOVE:
                int deltaX = mLastX - scrollX;
                scrollBy(deltaX,0);
                break;
            case MotionEvent.ACTION_UP:
                break;
        }
        mLastX = scrollX;
        mLastY = scrollY;
        return true;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        boolean isIntercept = false;
        mCurrentX = (int) ev.getX();
        mCurrentY = (int) ev.getY();

        switch (ev.getAction()){
            case MotionEvent.ACTION_DOWN:
                isIntercept = false;
                break;
            case MotionEvent.ACTION_MOVE:
                //往左滑动为正
                int deltaX = mLastX - mCurrentX;
                int deltaY = mLastY - mCurrentY;
                if(Math.abs(deltaX) > Math.abs(deltaY)){
                    isIntercept = true;
                }
                else {
                    isIntercept = false;
                }
                break;
            case MotionEvent.ACTION_UP:
                isIntercept = false;
                break;
        }
        mLastX = mCurrentX;
        mLastY = mCurrentY;
        return isIntercept;
    }

HorzonScrollLinearLayout

发生滑动的时候,只有第一个显示出来

为什么会这样子呢,因为我忘了LinearLayout的大小是屏幕的宽度,所以整体大小值有一个屏幕宽,第二个TextView因为第一个TextView占满的屏幕,根据LinearLayout的源码

就是当前容器的宽度大小 减去 上一子类View占用的控件,就是当前子类的可用空间。

解决办法:

1、在java文件中,将TextView加入LinearLayout中,并设置TextView的LayoutParam.width 为 屏幕宽度。

TextView textView = new TextView(this);
textView.getLayoutParams().width = screenWidth;
textView.getLayoutParams().height = screenHeight;

mHorzonScroll.addView(textView);

解决办法

时间: 2024-11-05 23:18:40

LinearLayout遇到的问题——利用LinearLayout做横向滑动冲突的相关文章

使用CollectionView做横向滑动分页效果:

一开始几页滑动是没有问题的,等滑到三四个页面之后,就出现奇怪的缝隙,一开始死活找不到原因,最后在layout的代理方法minimumLineSpacingForSectionAtIndex返回值设置为0才解决,一开始想我只显示一行,跟这个应该没什么关系吧,就没设置,其他的两个代理方法minimumInteritemSpacingForSectionAtIndex和insetForSectionAtIndex都返回的是0.最后没辙了,1个晚上过去了,加了一个代理方法,然后问题就奇妙的解决了. //

[转载] ul li css 做横向菜单

原文地址: http://www.cnblogs.com/amylis_chen/archive/2011/09/24/2188398.html 第一步:建立一个无序列表 我们先建立一个无序列表,来建立菜单的结构.代码是: <ul> <li><a href="1">首页</a></li> <li><a href="2">产品介绍</a></li> <li

Java基础-继承 利用接口做参数,写个计算器,能完成+-*/运算

38.利用接口做参数,写个计算器,能完成+-*/运算 (1)定义一个接口Compute含有一个方法int computer(int n,int m); (2)设计四个类分别实现此接口,完成+-*/运算 (3)设计一个类UseCompute,含有方法: public void useCom(Compute com, int one, int two) 此方法要求能够:1.用传递过来的对象调用computer方法完成运算 2.输出运算的结果 (4)设计一个测试类,调用UseCompute中的方法us

利用toString做类型的判断

//利用toString做类型的判断 : /*var arr = []; alert( Object.prototype.toString.call(arr) == '[object Array]' ); */ //'[object Array]'

android——利用SharedPreference做引导界面

很久以前就接触过sharedPreference这个android中的存储介质.但是一直没有实际使用过,今天在看之前做的“民用机型大全”的app时,突然想到可以使用sharedPreference类来改进这个app中的一个缺陷. 此前,我先介绍sharedPreference的使用.Android数据总共有四种存储的方式 一.SharePreference 二.SQLite 三.File 四.ContentProvider SharedPreference类是一个轻量级的存储类,特别适合保存软件

利用滤镜做一个太阳

这篇文章主要给大家讲解的是如何利用滤镜做一个太阳,只需要照着本教程操作一遍,你就可以做出一样的效果,想学的朋友一起来看看吧.

利用XtraBackup做mysql不停机重做主从复制

不停机做mysql主从同步,可以使用mysqldump,但是这个效率比较低,利用XtraBackup来实现这个,效率比较高! 一 xtrabackup安装: yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL rpm -ivh percona-xtrabackup-2.2.12-1.el6.x86_64.rpm 安装libenv: wget ftp://rpmfind.net/linu

KNIMI数据挖掘建模与分析系列_002_利用KNIMI做商超零售关联推荐

利用KNIMI做商超零售关联推荐 老帅 20150801 http://blog.csdn.net/shuaihj 一.測试数据 须要測试数据,请留下邮箱 二.训练关联推荐规则 1.读取销售记录(sales.table) 2.训练关联规则(得到前后项) watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />

KNIMI数据挖掘建模与分析系列_003_利用KNIMI做客户细分

利用KNIMI做客户细分 老帅 20150801 http://blog.csdn.net/shuaihj 一.测试数据 需要测试数据,请留下邮箱 二.计算消费金额和消费次数 1.读入(销售数据.csv) 读取列标题 2. 时间格式转换 按指定时间格式识别"订单创建日期"列 3.对金额分组加和 依据客户编号对"销售金额"加和 4.字段重命名更可读 统计结果 5. 对订单分组计数 依据客户编号对"销售订单编号"进行去重加和 6.字段重命名更可读 统