Scrollview vertical and horizontal in android(在android中垂直和水平滚动视图)
问题描述
我真的厌倦了寻找垂直和水平滚动视图的解决方案.
I'm really tired looking for a solution for vertical and horizontal Scrollview.
我读到框架中没有任何视图/布局实现此功能,但我需要这样的东西:
I read that there are not any views/layouts in the framework which implement this feature, but I need something like this:
我需要在其他中定义一个布局,子布局必须实现垂直/水平滚动才能移动.
I need to define a layout within other, the child layout must implement scrolling vertical/horizontal for moving.
最初实现了一个逐像素移动布局的代码,但我认为这不是正确的方法.我用 ScrollView 和 Horizontal ScrollView 进行了尝试,但没有像我想要的那样工作,因为它只实现垂直或水平滚动.
Initially implemented a code that moved the layout pixel by pixel, but I think that is not the right way. I tried it with ScrollView and Horizontal ScrollView but nothing works like I want it to, because it only implements vertical or horizontal scrolling.
Canvas 不是我的解决方案,因为我需要在某人的子元素中附加监听器.
Canvas is not my solution because I need to attach listeners in someones child elements.
我能做什么?
推荐答案
结合上面的一些建议,得到了很好的解决方案:
Mixing some of the suggestions above, and was able to get a good solution:
自定义滚动视图:
package com.scrollable.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ScrollView;
public class VScroll extends ScrollView {
    public VScroll(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    public VScroll(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public VScroll(Context context) {
        super(context);
    }
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return false;
    }
}
自定义 HorizontalScrollView:
Custom HorizontalScrollView:
package com.scrollable.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.HorizontalScrollView;
public class HScroll extends HorizontalScrollView {
    public HScroll(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    public HScroll(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public HScroll(Context context) {
        super(context);
    }
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return false;
    }
}
ScrollableImageActivity:
the ScrollableImageActivity:
package com.scrollable.view;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.HorizontalScrollView;
import android.widget.ScrollView;
public class ScrollableImageActivity extends Activity {
    private float mx, my;
    private float curX, curY;
    private ScrollView vScroll;
    private HorizontalScrollView hScroll;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        vScroll = (ScrollView) findViewById(R.id.vScroll);
        hScroll = (HorizontalScrollView) findViewById(R.id.hScroll);
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        float curX, curY;
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                mx = event.getX();
                my = event.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                curX = event.getX();
                curY = event.getY();
                vScroll.scrollBy((int) (mx - curX), (int) (my - curY));
                hScroll.scrollBy((int) (mx - curX), (int) (my - curY));
                mx = curX;
                my = curY;
                break;
            case MotionEvent.ACTION_UP:
                curX = event.getX();
                curY = event.getY();
                vScroll.scrollBy((int) (mx - curX), (int) (my - curY));
                hScroll.scrollBy((int) (mx - curX), (int) (my - curY));
                break;
        }
        return true;
    }
}
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <com.scrollable.view.VScroll android:layout_height="fill_parent"
        android:layout_width="fill_parent" android:id="@+id/vScroll">
        <com.scrollable.view.HScroll android:id="@+id/hScroll"
            android:layout_width="fill_parent" android:layout_height="fill_parent">
            <ImageView android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="QGRyYXdhYmxlL2Jn"></ImageView>
        </com.scrollable.view.HScroll>
    </com.scrollable.view.VScroll>
</LinearLayout>
这篇关于在android中垂直和水平滚动视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在android中垂直和水平滚动视图
 
				
         
 
            
        - 如何检查发送到 Android 应用程序的 Firebase 消息的传递状态? 2022-01-01
- 想使用ViewPager,无法识别android.support.*? 2022-01-01
- Android - 我如何找出用户有多少未读电子邮件? 2022-01-01
- 用 Swift 实现 UITextFieldDelegate 2022-01-01
- Android - 拆分 Drawable 2022-01-01
- 使用自定义动画时在 iOS9 上忽略 edgesForExtendedLayout 2022-01-01
- Android viewpager检测滑动超出范围 2022-01-01
- android 4中的android RadioButton问题 2022-01-01
- 在测试浓缩咖啡时,Android设备不会在屏幕上启动活动 2022-01-01
- MalformedJsonException:在第1行第1列路径中使用JsonReader.setLenient(True)接受格式错误的JSON 2022-01-01
 
				 
				 
				 
				