android滑动,android滑动吸顶

android 自定义View中滑动操作防止超出边界的简便方法

在android开发中,自定义View中经常会用到滑动操作,肯定要防止滑动超出边界。这里是一个防止滑出边界非常简便的一个方法。

创新互联建站成都网站建设按需制作,是成都网站设计公司,为水泥搅拌车提供网站建设服务,有成熟的网站定制合作流程,提供网站定制设计服务:原型图制作、网站创意设计、前端HTML5制作、后台程序开发等。成都网站制作热线:028-86922220

计算左右边界X或上下边界Y的值,如果不超出屏幕,左边边界与顶部边界是0,右边与底部边界是屏幕宽高度。然后重写scrollTo方法:

@Overridepublic void scrollTo(int x, int y) { 

if(xmRightOffsetX) x=mRightOffsetX; 

if(xmLeftOffsetX) x=mLeftOffsetX; 

super.scrollTo(x, y);

}

android怎么实现页面的左右滑动

Android上有一个控件叫做ViewPager,该控件可以根据item的多少实现左右滑动的效果。

Android上还有一个东西叫做Fragment,这是一个依赖于Activity而又独立的页面。

综合这两个控件的特性,可以使用ViewPager+Fragment的方式,即在ViewPager里嵌入Fragment的方式,实现页面左右滑动的效果。

android RecyclerView四种滑动方式

我们使用recyclerview滑动最多的效果就是比如通讯录右边有字母,然后点击某个字母,那个字母就显示在最上面,这样的效果主要当通讯录里面联系人太多了,不好查找,还要用户一个个去翻动,提高了效率.

这里说的四种是自己总结的,分别是:scrollBy(),scrollToPosition(),smoothScrollToPosition(),还有一个是LinearLayoutManager中的scrollToPositionWithOffset()

这个是每个View都有的方法,移动的是其内容,

这个是移动到可见范围内,是瞬间完成的,给人感觉很生硬,比如:

表示第20个item条目在屏幕可见范围内,但不是第20个条目在屏幕可见的最上面的.

和scrollToPosition() 效果是一样的,只是不是瞬间完成的,我们看到方法前面有个smooth单词就知道了,

这个才是真正定位到某个条目在屏幕可见范围内.

怎么样有滑动效果 android

android的滑动效果是通过View容器类ViewFlipper来实现的。

ViewFilpper 是Android官方提供的一个View容器类,继承于ViewAnimator类,用于实现页面切换,也可以设定时间间隔,让它自动播放。

又ViewAnimator继承至于FrameLayout的,所以ViewFilpper的Layout里面可以放置多个View,继承关系如下:

1、activity的写法如下:

import android.app.Activity;

import android.os.Bundle;

import android.view.GestureDetector;

import android.view.MotionEvent;

import android.view.ViewGroup.LayoutParams;

import android.view.animation.Animation;

import android.view.animation.AnimationUtils;

import android.widget.ImageView;

import android.widget.ViewFlipper;

public class ViewFlipperActivity extends Activity implements android.view.GestureDetector.OnGestureListener {

private int[] imgs = { R.drawable.img1, R.drawable.img2,

R.drawable.img3, R.drawable.img4, R.drawable.img5 };

private GestureDetector gestureDetector = null;

private ViewFlipper viewFlipper = null;

private Activity mActivity = null;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mActivity = this;

viewFlipper = (ViewFlipper) findViewById(R.id.viewflipper);

gestureDetector = new GestureDetector(this);    // 声明检测手势事件

for (int i = 0; i  imgs.length; i++) {          // 添加图片源

ImageView iv = new ImageView(this);

iv.setImageResource(imgs[i]);

iv.setScaleType(ImageView.ScaleType.FIT_XY);

viewFlipper.addView(iv, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

}

viewFlipper.setAutoStart(true);         // 设置自动播放功能(点击事件,前自动播放)

viewFlipper.setFlipInterval(3000);

if(viewFlipper.isAutoStart()  !viewFlipper.isFlipping()){

viewFlipper.startFlipping();

}

}

@Override

public boolean onTouchEvent(MotionEvent event) {

viewFlipper.stopFlipping();             // 点击事件后,停止自动播放

viewFlipper.setAutoStart(false);

return gestureDetector.onTouchEvent(event);         // 注册手势事件

}

@Override

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

if (e2.getX() - e1.getX()  120) {            // 从左向右滑动(左进右出)

Animation rInAnim = AnimationUtils.loadAnimation(mActivity, R.anim.push_right_in);  // 向右滑动左侧进入的渐变效果(alpha  0.1 - 1.0)

Animation rOutAnim = AnimationUtils.loadAnimation(mActivity, R.anim.push_right_out); // 向右滑动右侧滑出的渐变效果(alpha 1.0  - 0.1)

viewFlipper.setInAnimation(rInAnim);

viewFlipper.setOutAnimation(rOutAnim);

viewFlipper.showPrevious();

return true;

} else if (e2.getX() - e1.getX()  -120) {        // 从右向左滑动(右进左出)

Animation lInAnim = AnimationUtils.loadAnimation(mActivity, R.anim.push_left_in);       // 向左滑动左侧进入的渐变效果(alpha 0.1  - 1.0)

Animation lOutAnim = AnimationUtils.loadAnimation(mActivity, R.anim.push_left_out);     // 向左滑动右侧滑出的渐变效果(alpha 1.0  - 0.1)

viewFlipper.setInAnimation(lInAnim);

viewFlipper.setOutAnimation(lOutAnim);

viewFlipper.showNext();

return true;

}

return true;

}

@Override

public boolean onDown(MotionEvent e) {

return false;

}

@Override

public void onLongPress(MotionEvent e) {

}

@Override

public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {

return false;

}

@Override

public void onShowPress(MotionEvent e) {

}

@Override

public boolean onSingleTapUp(MotionEvent e) {

return false;

}

}

2、main.xml配置文件:

?xml version="1.0" encoding="utf-8"?

LinearLayout xmlns:android=""  

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" 

ViewFlipper

android:id="@+id/viewflipper"

android:layout_width="fill_parent"

android:layout_height="fill_parent"/

/LinearLayout

以上完成了手势滑屏:

手势滑动屏幕动画,是通过android.view.GestureDetector类检测各种手势事件实现的,该类有两个回调接口(Interface)

A、GestureDetector.OnDoubleTapListener,用来通知DoubleTap双击事件,类似于鼠标的双击事件,接口三个抽象回调函数如下

1、onDoubleTap(MotionEvent e):DoubleTap双击手势事件后通知(触发)

2、onDoubleTapEvent(MotionEvent e):DoubleTap双击手势事件之间通知(触发),包含down、up和move事件(这里指的是在双击之间发生的事件,例如在同一个地方双击会产生DoubleTap手势,而在DoubleTap手势里面还会发生down和up事件,这两个事件由该函数通知)

3、onSingleTapConfirmed(MotionEvent e):用来判定该次点击是SingleTap而不是DoubleTap,如果连续点击两次就是DoubleTap手势;那么如果只点击一次,系统等待一段时间后没有收到第二次点击则判定该次点击为SingleTap而不是DoubleTap,此时触发的就是SingleTapConfirmed事件


文章标题:android滑动,android滑动吸顶
转载源于:http://scyanting.com/article/dsscggs.html