`
龙哥IT
  • 浏览: 258545 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

以后布局界面就加上CustomerScrollView这个滚动事件

 
阅读更多
package com.example.scrolldemo;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.TranslateAnimation;
import android.widget.ScrollView;

/**
 * 可以拖动的ScrollView
 *
 */
public class CustomerScrollView extends ScrollView {

	private static final int size = 4;
	private View inner;
	private float y;
	private Rect normal = new Rect();;

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

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

	@Override
	protected void onFinishInflate() {
		if (getChildCount() > 0) {
			inner = getChildAt(0);
		}
	}

	@SuppressLint("ClickableViewAccessibility")
	@Override
	public boolean onTouchEvent(MotionEvent ev) {
		if (inner == null) {
			return super.onTouchEvent(ev);
		} else {
			commOnTouchEvent(ev);
		}
		return super.onTouchEvent(ev);
	}

	public void commOnTouchEvent(MotionEvent ev) {
		int action = ev.getAction();
		switch (action) {
		case MotionEvent.ACTION_DOWN:
			y = ev.getY();
			break;
		case MotionEvent.ACTION_UP:
			if (isNeedAnimation()) {
				// Log.v("mlguitar", "will up and animation");
				animation();
			}
			break;
		case MotionEvent.ACTION_MOVE:
			final float preY = y;
			float nowY = ev.getY();
			/**
			 * size=4 表示 拖动的距离为屏幕的高度的1/4
			 */
			int deltaY = (int) (preY - nowY) / size;
			// 滚动
			// scrollBy(0, deltaY);

			y = nowY;
			if (isNeedMove()) {
				if (normal.isEmpty()) {
					normal.set(inner.getLeft(), inner.getTop(),
							inner.getRight(), inner.getBottom());
					return;
				}
				int yy = inner.getTop() - deltaY;

				// 移动布局
				inner.layout(inner.getLeft(), yy, inner.getRight(),
						inner.getBottom() - deltaY);
			}
			break;
		default:
			break;
		}
	}

	public void animation() {
		TranslateAnimation ta = new TranslateAnimation(0, 0, inner.getTop(),
				normal.top);
		ta.setDuration(200);
		inner.startAnimation(ta);
		inner.layout(normal.left, normal.top, normal.right, normal.bottom);
		normal.setEmpty();
	}

	public boolean isNeedAnimation() {
		return !normal.isEmpty();
	}

	public boolean isNeedMove() {
		int offset = inner.getMeasuredHeight() - getHeight();
		int scrollY = getScrollY();
		if (scrollY == 0 || scrollY == offset) {
			return true;
		}
		return false;
	}

}

 

<?xml version="1.0" encoding="utf-8"?>
<com.example.scrolldemo.CustomerScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:scrollbars="none" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
        <TextView
            android:id="@+id/tv_version_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
             android:text="地方萨芬萨芬萨芬石佛"/>

    </LinearLayout>

</com.example.scrolldemo.CustomerScrollView>

 

比直接用Scrollview好多了

分享到:
评论

相关推荐

    WPF自定义VirtualizingPanel,实现界面动态布局

    4. **事件处理**:监听窗口大小改变和滚动事件,以便适时调整布局和更新可视元素。 总的来说,自定义 `VirtualizingPanel` 是一种强大的技术,可以满足各种复杂界面布局的需求,同时也充分利用了 WPF 的数据虚拟化...

    页面布局有滚动条

    在网页设计中,页面布局与滚动条是两个关键的元素,它们共同决定了用户在浏览网站时的体验。页面布局有滚动条,意味着网页的内容超过了单屏显示的范围,需要通过滚动来查看全部信息。这样的设计既有可能是由于内容...

    解决Android ListView滚动布局错位

    这个方法通常称为`getItemViewType()`,它返回一个整数标识符,表示对应布局的类型。然后在`getView()`方法中,我们根据返回的类型来决定如何初始化或复用视图。 例如: ```java @Override public int ...

    android-屏幕滚动与布局设计

    在Android开发中,屏幕滚动与布局设计是构建用户界面(UI)的重要组成部分。它们决定了应用程序如何展示内容,以及用户如何与这些内容互动。本篇文章将深入探讨这两个关键概念,并提供实用的技术细节和最佳实践。 ...

    无缝连接可循环滚动布局

    在Android开发中,创建一个无缝连接可循环滚动的布局是一个常见的需求,比如在轮播图、商品列表等场景。...这个自定义布局可以作为学习Android视图层次结构、滚动动画以及事件处理的一个很好的实践案例。

    全屏响应式列自适应布局html5滚动效果单页模板

    本模板,"全屏响应式列自适应布局html5滚动效果单页模板",正是这一理念的具体体现,利用HTML5的强大功能,构建了一个既美观又实用的网页布局。 首先,模板的核心在于其响应式列自适应布局。这种布局方式能够根据...

    MFC界面自动布局demo

    此外,由于它是基于宏定义的,因此在编译时就能确定布局规则,这在一定程度上也提高了程序的运行效率。 总的来说,通过学习和掌握EasySize,MFC开发者可以更高效地实现界面的自动布局,提升应用的用户体验。在实际...

    krkr实现滚动存档界面示例

    通过这个示例,开发者可以学习到krkr引擎中界面设计、事件处理、数据管理等多个方面的知识,从而提升自己的游戏开发技能。在实际应用中,可以根据游戏的特定需求进行调整和扩展,创造出更加丰富的交互体验。

    Android新闻类界面分享(多种布局的listview)

    在这个项目中,我们关注的是如何利用多种布局的ListView来构建这样一个界面。ListView作为Android UI组件之一,适用于显示大量可滚动的数据集,通过适配器(Adapter)机制,我们可以灵活地定制每个列表项的视图。 ...

    给groupbox加上滚动条

    在C#编程中,我们经常会遇到需要在控件中显示大量数据的情况,此时,滚动条就显得尤为重要。...通过理解这个过程,开发者可以更好地控制界面布局,特别是当需要展示大量数据时,能够提供更好的用户体验。

    QQ设置布局界面实现(android)

    在这个“QQ设置布局界面实现”的项目中,我们将深入探讨如何使用Android的UI组件和自定义形状来构建类似QQ的设置界面。 首先,让我们来理解一下`shape`元素在Android中的作用。`shape`是XML drawable资源文件的一种...

    Qt悬浮滚动条-滚动条样式

    总的来说,“Qt悬浮滚动条-滚动条样式”这个话题涉及到了Qt界面设计的核心技巧,包括自定义布局、样式表的应用以及信号与槽机制的使用。通过这些技术,开发者能够创造出既美观又实用的滚动条,提升用户在Qt应用中的...

    MFC界面编程布局管理

    使用这个文件,开发者可以直接将其集成到MFC工程中,快速创建出具有专业布局的用户界面,而不必从头编写复杂的布局代码。 总的来说,MFC的布局管理是C++开发Windows应用时的关键技术之一。通过熟练掌握布局管理,...

    简单实用的App样式单页全屏滚动布局jQuery插件

    在实现上,这个插件可能采用了监听滚动事件、改变元素的定位或CSS transform属性等方式来达到平滑滚动的效果。同时,为了确保在不同设备和浏览器上的兼容性,它可能包含了响应式设计和跨浏览器优化的策略。开发者只...

    微信界面布局weui

    微信界面布局weui

    ios 自动布局滚动视图

    在iOS开发中,AutoLayout是苹果提供的一种强大的界面布局机制,它允许开发者在不同尺寸的屏幕上创建适应性强的用户界面。本教程将深入探讨如何在...不过,掌握了这个基础,你就可以灵活应对各种复杂的界面布局需求了。

    咖啡界面布局

    "咖啡界面布局"这个项目提供了一个很好的学习起点,它可能包含了一系列与咖啡相关的应用界面元素,如菜单、订单、评价等。通过分析这个项目,我们可以深入学习Android界面设计的基本原理和实践技巧。 首先,Android...

    wpf 界面控件随着界面大小进行缩放

    综上所述,WPF的界面缩放机制结合了布局管理、变换、事件处理和滚动条等多个方面,为开发者提供了丰富的工具来创建响应式、用户友好的应用程序。通过熟练掌握这些技术,开发者可以构建出在各种设备上都能优雅呈现的...

    实现头部一起滚动的AbsListView布局

    这个布局需要重写滚动事件处理,以实现头部视图的滚动同步。 `WithNavPannelView`可能是用于表示头部视图的自定义视图,它可能包含需要随着AbsListView一起滚动的元素,比如导航菜单、搜索栏等。这个视图需要有相应...

    一个界面滑动的滚动条信息程序

    在这个组件的设计中,开发者需要考虑如何合理布局滚动条,确保其易于理解和使用,同时也要兼顾视觉美观和一致性,符合人机工程学原则。 总的来说,这个“一个界面滑动的滚动条信息程序”项目涉及到了用户界面设计的...

Global site tag (gtag.js) - Google Analytics