HorizontalScrollView下自定义ViewGroup无法实现滑动

本文介绍了在Android中自定义ViewGroup MyViewGroup时遇到的滑动问题,该问题发生在HorizontalScrollView内。文章通过代码展示了解决方案,包括自定义ViewGroup的onMeasure和onLayout方法,以及添加滚动监听接口ScrollListenerInfer,以实现滑动时的布局更新。
摘要由CSDN通过智能技术生成


代码:自定义MyViewGroup类


import android.content.Context;
import android.view.View;
import android.view.ViewGroup;


public class MyViewGroup extends ViewGroup {


private final static int VIEW_MARGIN = 100;


private int lengthX;
private int lengthY;


private ScrollListenerInfer listener;


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


public void onListener(ScrollListenerInfer l) {
this.listener = l;
}


@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
for (int index = 0; index < getChildCount(); index++) {
final View child = getChildAt(index);
/**
* measure MeasureSpec.EXACTLY:精确的尺寸 MeasureSpec.AT_MOST:最大可获得的空间
* MeasureSpec.UNSPECIFIED:对于控件尺寸来说,没有任何参考意义
*/
child.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}


@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
// int row = 0;// 行数
int line = 0;// 列数
lengthX = left;
lengthY = top;
for (int i = 0; i < getChildCount(); i++) {
final View child = this.getChildAt(i);
int width = child.getMeasuredWidth();
int height = child.getMeasuredHeight();

/**
* 自动换列
*/
lengthX = line * (width + VIEW_MARGIN) + VIEW_MARGIN + width + left;
lengthY += height + VIEW_MARGIN;
if (lengthY > bottom) {
line++;
lengthX = line * (width + VIEW_MARGIN) + VIEW_MARGIN + width
+ left;
lengthY = height + VIEW_MARGIN + top;
}

/**
* 自动换行
*/
// lengthX += width + VIEW_MARGIN;
// lengthY = row * (height + VIEW_MARGIN) + VIEW_MARGIN + height + top;
// if (lengthX > right) {
// lengthX = width + VIEW_MARGIN + left;
// row++;
// lengthY = row * (height + VIEW_MARGIN) + VIEW_MARGIN + height
// + bottom;
// }

child.layout(lengthX - width, lengthY - height, lengthX, lengthY);// 子控件的总宽度、高度
}
listener.onLoad(lengthX);
}


}

代码:MeetingListActivity

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;


import zdaap.meeting.pad.beans.MeetingBean;
import zdaap.meeting.pad.json.GetNetWorkData;
import zdaap.meeting.pad.util.NetWorkUtil;
import zdaap.meeting.pad.view.MyViewGroup;
import zdaap.meeting.pad.view.ScrollListenerInfer;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextPaint;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;


@SuppressLint("HandlerLeak")
public class MeetingListActivity extends BaseActivity {


private Calendar c;// 日期控件


private LinearLayout home_middle_layout;

private List<MeetingBean> meeting;
private ArrayList<String> meetingInfo;

private EditText password;
private Dialog d;// 密码对话框

@SuppressWarnings("unchecked")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.meeting_list_layout);

home_middle_layout = (LinearLayout)findViewById(R.id.home_middle_layout);

findViewById(R.id.home_

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值