android怎么给有很多按钮的页面添加h5页面滑动事件件

您的赞赏,是对我创作的最大鼓励。|赞赏
收藏已收藏 | 0赞 | 0
分享到微信扫码分享到微信
产品经理疯子。
4913篇作品14.4m阅读总量
热门问题12345678910[Android开发学习30]动态创建多个按钮,并给每个按键添加监听事件_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
[Android开发学习30]动态创建多个按钮,并给每个按键添加监听事件
上传于||文档简介
&&[Android开发学习30]动态创建多个按钮,并给每个按键添加监听事件
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢之前写过关于HorizontalScrollView滑动和按钮事件触发问题,但是不能所有的情况,最近几天一直在想这个问题,今天有一个比较好的解决思路,最终应用在项目里面效果也很好,首先说明一下功能:
(1)、按下按钮,不滑动,触发按钮功能
(2)、按下按钮,滑动触发滑动事件
这里的按下包含长按和短按情况
首先要解决这个问题需要明白Android中的Touch事件是如何进行处理的,这里有一篇文章:& 里面详细介绍了Touch事件处理方法,总结性语句:
&&&&&&&& 当TouchEvent发生时,首先Activity将TouchEvent传递给最顶层的View, TouchEvent最先到达最顶层 view 的 dispatchTouchEvent ,然后由 &dispatchTouchEvent 方法进行分发,如果dispatchTouchEvent返回true ,则交给这个view的onTouchEvent处理,如果dispatchTouchEvent返回 false ,则交给这个 view 的 interceptTouchEvent 方法来决定是否要拦截这个事件,如果 interceptTouchEvent 返回 true ,也就是拦截掉了,则交给它的 onTouchEvent 来处理,如果 interceptTouchEvent 返回 false ,那么就传递给子 view ,由子 view 的 dispatchTouchEvent 再来开始这个事件的分发。如果事件传递到某一层的子 view 的 onTouchEvent 上了,这个方法返回了 false ,那么这个事件会从这个 view 往上传递,都是 onTouchEvent 来接收。而如果传递到最上面的 onTouchEvent 也返回 false 的话,这个事件就会&消失&,而且接收不到下一次事件。
&&&&& 注意:
(1)、当滑动的时候,你不一定能正好移动合适的位置,这个时候就需要使用smoothScrollTo一类的功能函数来调整位置,而smoothScrollTo调用的时候,最好放在Handler里面实现--问题:当手慢慢移动按钮然后松开会出现异常,不过让你快速移动按钮,然后松开,按钮自己滑动停止不会有问题。
(2)、一般来说我们把一个按钮加上它前面的空白作为一组,滑动停止的时候,通过&getScrollX()来获取你当前滑动的位置,这样就可以计算你滑动停止的位置是否适合,如果不适合通过smoothScrollTo来调整,这里我用AppInforToSystem.bottom_btn_scroll_range作为一组的长度,方法如下:
public void checkRange(int value){
if (value &= AppInforToSystem.bottom_btn_scroll_range / 2) {
value = 0;
smoothScrollTo(0, 0);
AppInforToSystem.bottom_btn_scroll_flag = 2;
}else if (value &= (diff_scroll - AppInforToSystem.bottom_btn_scroll_range / 2)) {
smoothScrollTo(diff_scroll, 0);
AppInforToSystem.bottom_btn_scroll_flag = 1;
int val = value / AppInforToSystem.bottom_btn_scroll_
int diff = value % AppInforToSystem.bottom_btn_scroll_
if (diff & AppInforToSystem.bottom_btn_scroll_range / 2) {
smoothScrollTo(AppInforToSystem.bottom_btn_scroll_range * val, 0);
smoothScrollTo(AppInforToSystem.bottom_btn_scroll_range * (val+1), 0);
AppInforToSystem.bottom_btn_scroll_flag = 0;
puteScroll();
} catch (Exception e) {
AppInforToSystem.bottom_btn_scroll_flag = 0;
更需要注意的是里面puteScroll();一定要加上,不然会出现按钮和上面的文字分离的现象,
View view = (View) this.getChildAt(this.getChildCount() - 1);
diff_scroll = view.getRight() - getWidth();//初始状态为0,没有滚动,如果滚动到右边,则等于subViewWidth - width
HorizontalScrollView只能有一个子孩子,所以要实现滑动多个组件的时候,需要使用LinearLayout或者RelativeLayout.
上面的diff_scroll就是你能够滑动的最大距离
(4)、如何检测滑动事件呢
我们需要实现一个类来继承HorizontalScrollView,并且重写onTouchEvent,当在ACTION_DOWN和ACTION_MOVE检测滑动事件并作相应处理
case MotionEvent.ACTION_DOWN:
if(AppInforToSystem.bottom_btn_scroll_flag != 3){
AppInforToSystem.bottom_btn_scroll_flag = 3;
AppConnect.getInstance().callBack(CustomerInterface.MESSAGE_SCROLL_LR_FLAG);
case MotionEvent.ACTION_MOVE:
if(AppInforToSystem.bottom_btn_scroll_flag != 3){
AppInforToSystem.bottom_btn_scroll_flag = 3;
AppConnect.getInstance().callBack(CustomerInterface.MESSAGE_SCROLL_LR_FLAG);
有的人会问为什么在ACTION_DOWN检测了还要在ACTION_MOVE进行检测,这个你就需要之前那篇文章里面的内容,Touch事件会一直传递到子view上面,所以不会触发HorizontalScrollView的ACTION_DOWN事件,如果你移动按钮,首先出发的是按钮的MOVE事件,如果你移动幅度大的话就会触发HorizontalScrollView的ACTION_MOVE事件
所以我们需要在这两个事件都要检测
(5)、有的按钮功能是按下实现,松开关闭,这种情况就要用到onInterceptTouchEvent,让它返回false,不拦截这个事件,你可以设置一个变量,当要实现这种功能的按你按下去的时候,设置变量AppInforToSystem.main_touch_flag为0,而在onInterceptTouchEvent检测到AppInforToSystem.main_touch_flag == 0的时候返回false,这样就不会触发HorizontalScrollView的MOVE事件
(6)、如果你按下一个按钮的时候,再移动按钮触发了HorizontalScrollView的ACTION_MOVE,则这个按钮虽然不能触发ACTION_UP事件,但是可以触发ACTION_CANCEL事件,这样我们就可以恢复你在DOWN的时候设置。
阅读(...) 评论()下次自动登录
现在的位置:
& 综合 & 正文
android:动态创建多个按钮 并给每个按键添加监听事件
//获取屏幕大小,以合理设定 按钮 大小及位置
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthP
int height = dm.heightP
//自定义layout组件
RelativeLayout layout = new RelativeLayout(this);
//这里创建16个按钮,每行放置4个按钮
Button Btn[] = new Button[16];
int j = -1;
(int i=0; i&=15; i++) {
Btn[i]=new Button(this);
Btn[i].setId(2000+i);
Btn[i].setText("按钮"+i);
RelativeLayout.LayoutParams btParams = new RelativeLayout.LayoutParams ((width-50)/4,40);
//设置按钮的宽度和高度
if (i%4 == 0) {
btParams.leftMargin = 10+ ((width-50)/4+10)*(i%4);
//横坐标定位
btParams.topMargin = 20 + 55*j;
//纵坐标定位
layout.addView(Btn[i],btParams);
//将按钮放入layout组件
this.setContentView(layout);
//批量设置监听
for (int k = 0; k &= Btn.length-1; k++) {
//这里不需要findId,因为创建的时候已经确定哪个按钮对应哪个Id
Btn[k].setTag(k);
//为按钮设置一个标记,来确认是按下了哪一个按钮
Btn[k].setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
int i = (Integer) v.getTag();
//这里的i不能在外部定义,因为内部类的关系,内部类好多繁琐的东西,要好好研究一番
Intent intent = new Intent();
intent.setClass(Work_01.this, Work_02.class);
Bundle bundle = new Bundle();
bundle.putInt("count", i);
intent.putExtras(bundle);
startActivity(intent);
Work_01.this.finish();
然后,可以在Work_02里将“按下的按钮为:” i 打印出来,以确认设置的监听是否正确。
比如,按下 按钮0 ,在Work_02对应的页面里,应该打印出 “按下的按钮为:0 ”。
//获取屏幕大小,以合理设定 按钮 大小及位置
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthP
int height = dm.heightP
//自定义layout组件
RelativeLayout layout = new RelativeLayout(this);
//这里创建16个按钮,每行放置4个按钮
Button Btn[] = new Button[16];
int j = -1;
(int i=0; i&=15; i++) {
Btn[i]=new Button(this);
Btn[i].setId(2000+i);
Btn[i].setText("按钮"+i);
RelativeLayout.LayoutParams btParams = new RelativeLayout.LayoutParams ((width-50)/4,40);
//设置按钮的宽度和高度
if (i%4 == 0) {
btParams.leftMargin = 10+ ((width-50)/4+10)*(i%4);
//横坐标定位
btParams.topMargin = 20 + 55*j;
//纵坐标定位
layout.addView(Btn[i],btParams);
//将按钮放入layout组件
this.setContentView(layout);
//批量设置监听
for (int k = 0; k &= Btn.length-1; k++) {
//这里不需要findId,因为创建的时候已经确定哪个按钮对应哪个Id
Btn[k].setTag(k);
//为按钮设置一个标记,来确认是按下了哪一个按钮
Btn[k].setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
int i = (Integer) v.getTag();
//这里的i不能在外部定义,因为内部类的关系,内部类好多繁琐的东西,要好好研究一番
Intent intent = new Intent();
intent.setClass(Work_01.this, Work_02.class);
Bundle bundle = new Bundle();
bundle.putInt("count", i);
intent.putExtras(bundle);
startActivity(intent);
Work_01.this.finish();
然后,可以在Work_02里将“按下的按钮为:” i 打印出来,以确认设置的监听是否正确。
比如,按下 按钮0 ,在Work_02对应的页面里,应该打印出 “按下的按钮为:0 ”。
&&&&推荐文章:
【上篇】【下篇】[Android开发学习30]动态创建多个按钮,并给每个按键添加监听事件
//获取屏幕大小,以合理设定 按钮 大小及位置
& DisplayMetrics dm = new DisplayMetrics();
& getWindowManager().getDefaultDisplay().getMetrics(dm);
& int width = dm.widthP
& int height = dm.heightP
&//自定义layout
& RelativeLayout layout = new RelativeLayout(this);&&&&&&&&
&//这里创建16个按钮,每行放置4个按钮
& Button Btn[] = new Button[16];
& int j = -1;
& for& (int i=0; i&=15; i++) {&&&&&
&&&&&&& Btn[i]=new Button(this);
&&&&&&& Btn[i].setId(2000+i);
&&&&&&& Btn[i].setText(&按钮&+i);&&
&&&&&&& RelativeLayout.LayoutParams btParams = new RelativeLayout.LayoutParams ((width-50)/4,40);& //设
置按钮的宽度和高度
&&&&&&& if (i%4 == 0) {
&&&&&&&& j++;
&&&&&&& btParams.leftMargin = 10+ ((width-50)/4+10)*(i%4);&& //横坐标定位&&&&&&&
&&&&&&& btParams.topMargin = 20 + 55*j;&& //纵坐标定位&&&&&&
&&&&&&& layout.addView(Btn[i],btParams);&& //将按钮放入layout组件
&&&& this.setContentView(layout);
&&& //批量设置监听
& for (int k = 0; k &= Btn.length-1; k++) {
&& //这里不需要findId,因为创建的时候已经确定哪个按钮对应哪个Id
&& Btn[k].setTag(k);&&&&&&&&&&&&&&& //为按钮设置一个标记,来确认是按下了哪一个按钮
&& Btn[k].setOnClickListener(new Button.OnClickListener() {
&&& @Override
&&&&&&& public void onClick(View v) {
&&&&&&&&&&& int i = (Integer) v.getTag();&& //这里的i不能在外部定义,因为内部类的关系,内部类好多繁琐的
东西,要好好研究一番
&&&&&&&&&&& Intent intent = new Intent();
&&&&&&&&&&& intent.setClass(Work_01.this, Work_02.class);
&&&&&&&&&&& Bundle bundle = new Bundle();
&&&&&&&&&&& bundle.putInt(&count&, i);
&&&&&&&&&&& intent.putExtras(bundle);
&&&&&&&&&&& startActivity(intent);
&&&&&&&&&&& Work_01.this.finish();&&&&&&&&&&&&&&&&&&
然后,可以在Work_02里将&按下的按钮为:& i 打印出来,以确认设置的监听是否正确。
比如,按下 按钮0 ,在Work_02对应的页面里,应该打印出 &按下的按钮为:0 &。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'}

我要回帖

更多关于 禁止页面滑动事件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信