gpt4 book ai didi

android - 在android中垂直和水平 ScrollView

转载 作者:IT老高 更新时间:2023-10-28 12:57:05 25 4
gpt4 key购买 nike

我真的厌倦了寻找垂直和水平 ScrollView 的解决方案。

我读到框架中没有任何 View /布局实现此功能,但我需要这样的东西:

我需要在其他中定义一个布局,子布局必须实现垂直/水平滚动才能移动。

最初实现了一个逐像素移动布局的代码,但我认为这不是正确的方法。我用 ScrollView 和 Horizo​​ntal ScrollView 进行了尝试,但没有像我想要的那样工作,因为它只实现垂直或水平滚动。

Canvas 不是我的解决方案,因为我需要在某人的子元素中附加监听器。

我能做什么?

最佳答案

混合了上面的一些建议,并且能够得到一个很好的解决方案:

自定义 ScrollView :

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;
}
}

自定义 Horizo​​ntalScrollView:

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:

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="@drawable/bg"></ImageView>
</com.scrollable.view.HScroll>
</com.scrollable.view.VScroll>

</LinearLayout>

关于android - 在android中垂直和水平 ScrollView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2044775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com