安卓JAVA滑动页面代码 android实现界面滑动xml

android下滑动返回上一个页面如何实现android下滑动返回上一个页面实现的代码如下:
[java] view plaincopy
package org.sunday.slidingreturn;
import com.example.slidingreturn.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.LinearLayout;
public class SecondActivity extends Activity implements OnTouchListener {
//手指向下滑动时的最小速度
private static final int XSPEED_MIN = 200;
//手指向下滑动时的最小距离
private static final int XDISTANCE_MIN = 150;
//记录手指按下时的横坐标 。
private float xDown;
//记录手指移动时的横坐标 。
private float xMove;
//用于计算手指滑动的速度 。
private VelocityTracker mVelocityTracker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Button btn = (Button) findViewById(R.id.btn_second);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(SecondActivity.this, ThirdActivity.class));
overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left);
}
});
LinearLayout ll = (LinearLayout) findViewById(R.id.ll_second);
ll.setOnTouchListener(this);
}
// 转载请说明出处:
@Override
public boolean onTouch(View v, MotionEvent event) {
createVelocityTracker(event);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
xDown = event.getRawX();
break;
case MotionEvent.ACTION_MOVE:
xMove = event.getRawX();
//活动的距离
int distanceX = (int) (xMove - xDown);
//获取顺时速度
int xSpeed = getScrollVelocity();
//当滑动的距离大于我们设定的最小距离且滑动的瞬间速度大于我们设定的速度时,返回到上一个activity
if(distanceXXDISTANCE_MINxSpeedXSPEED_MIN) {
finish();
}
break;
case MotionEvent.ACTION_UP:
recycleVelocityTracker();
break;
default:
break;
}
return true;
}
/**
* 创建VelocityTracker对象,并将触摸content界面的滑动事件加入到VelocityTracker当中 。
*/
private void createVelocityTracker(MotionEvent event) {
if (mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
}
mVelocityTracker.addMovement(event);
}
/**
* 回收VelocityTracker对象 。
*/
private void recycleVelocityTracker() {
mVelocityTracker.recycle();
mVelocityTracker = null;
}
/**
* 获取手指在content界面滑动的速度 。
*
* @return 滑动速度,以每秒钟移动了多少像素值为单位 。
*/
private int getScrollVelocity() {
mVelocityTracker.computeCurrentVelocity(1000);
int velocity = (int) mVelocityTracker.getXVelocity();
return Math.abs(velocity);
}
}
android 在fragment里的怎样实现滑动fragment 按照一般的思路,我们或许会这么做:首先,使用getActionBar()方法获得操作栏,然后我们将操作栏的导航模式设置为Tab , 并添加一些Tab,然后实现TabListener接口;其次,我们将多个布局通过Inflater()方法变成View , 然后放到ViewPager里面,并实现OnPageChangeListener接口就可以了 。由此我们可以写出下面的代码:
package com.Android.AnyViewUI;
import java.util.ArrayList;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
public class MainActivity extends FragmentActivity implements TabListener,OnPageChangeListener {
private ActionBar mActionBar;
private ViewPager mViewPager;
private TabPagerAdapter mAdapter;
private ArrayListView mViews;
private ArrayListActionBar.Tab mTabs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_main);
//取得ActionBar
mActionBar=getActionBar();
//以Tab方式导航
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//禁用ActionBar标题
mActionBar.setDisplayShowTitleEnabled(false);
//禁用ActionBar图标
mActionBar.setDisplayUseLogoEnabled(false);
//禁用ActionBar返回键
mActionBar.setDisplayShowHomeEnabled(false);
//添加Tabs
mTabs=new ArrayListActionBar.Tab();
ActionBar.Tab tab0=mActionBar.newTab();
tab0.setText("界面一");
tab0.setTabListener(this);
mTabs.add(tab0);
mActionBar.addTab(tab0);
ActionBar.Tab tab1=mActionBar.newTab();
tab1.setText("界面二");
tab1.setTabListener(this);
mTabs.add(tab1);
mActionBar.addTab(tab1);
ActionBar.Tab tab2=mActionBar.newTab();
tab2.setText("界面三");
tab2.setTabListener(this);
mTabs.add(tab2);
mActionBar.addTab(tab2);
//获取ViewPager
mViewPager=(ViewPager)findViewById(R.id.ViewPager);
//初始化mViews
mViews=new ArrayListView();
mViews.add(LayoutInflater.from(this).inflate(R.layout.layout_0, null));
mViews.add(LayoutInflater.from(this).inflate(R.layout.layout_1, null));
mViews.add(LayoutInflater.from(this).inflate(R.layout.layout_2, null));
//初始化mAdapter
mAdapter=new TabPagerAdapter(mViews);
mViewPager.setAdapter(mAdapter);
mViewPager.setOnPageChangeListener(this);
//默认显示第二项
mViewPager.setCurrentItem(2);
}
@Override
public void onTabReselected(Tab mTab, FragmentTransaction arg1)
{
}
@Override
public void onTabSelected(Tab mTab, FragmentTransaction arg1)
{
if(mViewPager!=null)
{
mViewPager.setCurrentItem(mTab.getPosition());
}
}
@Override
public void onTabUnselected(Tab mTab, FragmentTransaction arg1)
{
}
@Override
public void onPageScrollStateChanged(int arg0)
{
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2)
{
}
@Override
public void onPageSelected(int Index)
{
//设置当前要显示的View
mViewPager.setCurrentItem(Index);
//选中对应的Tab
mActionBar.selectTab(mTabs.get(Index));
}
}
其中,TabPagerAdapter是一个继承自PagerAdapter的适配器类:
package com.Android.AnyViewUI;
import java.util.ArrayList;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
public class TabPagerAdapter extends PagerAdapter
{
private ArrayListView mViews;
public TabPagerAdapter(ArrayListView mViews)
{
this.mViews=mViews;
}
@Override
public void destroyItem(View container, int position, Object object)
{
((ViewPager)container).removeView(mViews.get(position));
}
@Override
public Object instantiateItem(View container, int position)
{
((ViewPager)container).addView(mViews.get(position), 0);
return mViews.get(position);
}
@Override
public int getCount()
{
return mViews.size();
}
@Override
public boolean isViewFromObject(View mView, Object mObject)
{
return (mView==mObject);
}
}
我们的代码从逻辑上来讲是没有什么问题的,但是当我们试图运行这段代码的时候,我们发现这段代码出了问题,而问题就出在OnTabSelected()上 。但是我们冷静下来想了想,没有错啊,那么问题到底出在哪里呢?看到网上的朋友说,这里这个适配器应该继承自FragmentPagerAdapter:
package com.Android.AnyViewUI;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class ViewPagerAdapter extends FragmentPagerAdapter {
//定义三个Fragment的索引
public static final int Fragment_Index_0=0;
public static final int Fragment_Index_1=1;
public static final int Fragment_Index_2=2;
public ViewPagerAdapter(FragmentManager fragmentManager)
{
super(fragmentManager);
}
@Override
public Fragment getItem(int Index)
{
Fragment mFragemnt=null;
switch(Index)
{
case Fragment_Index_0:
mFragemnt=new Fragment_0();
break;
case Fragment_Index_1:
mFragemnt=new Fragment_1();
break;
case Fragment_Index_2:
mFragemnt=new Fragment_2();
break;
}
return mFragemnt;
}
@Override
public int getCount()
{
return 3;
}
}
其中,Fragment_0、Fragment_1、Fragment_2是继承自Fragment的类,由于三个布局基本一样,这里只给出Fragment_0的代码:
package com.Android.AnyViewUI;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Fragment_0 extends Fragment
{
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
{
View mView=inflater.inflate(R.layout.layout_0, container, false);
return mView;
}
}
如何用java实现textview上下滑动在TextView中设置
android:scrollHorizontally="true"
在Java中设置属性
textview.setMovementMethod(ScrollingMovementMethod.getInstance());
这样在铺满的时候就可以滚动了
android Launcher的滑动效果怎么实现?滑动功能主要分两步:
1、在onInterceptTouchEvent中进行拦截 。
2、在onTouchEvent中进行滑动 。
1,onInterceptTouchEvent(MotionEvent en)
在这个方法中 , 决定了什么时候截获MotionEvent来实现滑动,避免了子View的其他事件的影响(如点击事件) 。
[java] view plaincopy
public boolean onInterceptTouchEvent(MotionEvent ev) {
/**
* This method JUST determines whether we want to intercept the motion.
* If we return true, onTouchEvent will be called and we do the actual
* scrolling there.
**/
//获取速度跟踪器 , 记录各个时刻的速度 。并且添加当前的MotionEvent以记录更行速度值 。
acquireVelocityTrackerAndAddMovement(ev);
......
/**
* Shortcut the most recurring case: the user is in the dragging
* state and he is moving his finger.We want to intercept this
* motion.
* 最常见的需要拦截的情况:用户已经进入滑动状态,并且正在滑动手指 。
* 对这种情况直接进行拦截 , 执行onTouchEvent()继续执行滑动操作 。
**/
final int action = ev.getAction();
if ((action == MotionEvent.ACTION_MOVE)
(mTouchState == TOUCH_STATE_SCROLLING)) {
return true;
}
switch (actionMotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_MOVE: {
/**
*mIsBeingDragged == false, otherwise the shortcut would have caught it. Check
* whether the user has moved far enough from his original down touch.
*/
/**
* 当在这里接受到ACTION_MOVE时,说明mTouchState!=TOUCH_STATE_SCROLLING并且mIsBeingDragged的值应该为false ,
* 否则DragLayer就应该截获了MotionEvent用于实现拖拽 。
* 此时还没有进入滑动状态,当mActivePointerId == INVALID_POINTER时,也就是在此之前没有接收到任何touch事件 。
* 这种情况发生在Workspace变小时,也就是之前Workspace处于SPRING_LOADED状态 。当出现这种情况时直接把当前的事件当作ACTION_DOWN进行处理 。
* 反之 , 则通过determineScrollingStart()尝试能够进入滑动状态 。
*/
if (mActivePointerId != INVALID_POINTER) {
determineScrollingStart(ev);
break;
}
// if mActivePointerId is INVALID_POINTER, then we must have missed an ACTION_DOWN
// event. in that case, treat the first occurence of a move event as a ACTION_DOWN
// i.e. fall through to the next case (don't break)
// (We sometimes miss ACTION_DOWN events in Workspace because it ignores all events
// while it's small- this was causing a crash before we checked for INVALID_POINTER)
}
case MotionEvent.ACTION_DOWN: {
final float x = ev.getX();
final float y = ev.getY();
// Remember location of down touch
//记录按下的x的坐标值
mDownMotionX = x;
//记录前次发生touch时的坐标
mLastMotionX = x;
mLastMotionY = y;
//因为在ScrollBy时只能使用int,而记录的x和y都是float,会产生误差,故这里用mLastMotionXRemainder记录余数
//用于消除误差
mLastMotionXRemainder = 0;
//x方向上的总位移
mTotalMotionX = 0;
mActivePointerId = ev.getPointerId(0);
//设置mAllowLongPress=true,允许LongClick事件发生 。LongClick事件定义在Launcher中
//处理的内容包括启动对shortcut的拖拽或弹出壁纸选择的对话框,若mAllowLongPress=false,
//则不会响应以上事件 。
mAllowLongPress = true;
/**
* If being flinged and user touches the screen, initiate drag;
* otherwise don't.mScroller.isFinished should be false when
* being flinged.
* 当屏幕处于flinged状态(快速滑动)时,若此时用户触摸了屏幕,需要使滑动停止 。
* 并且初始化拖拽的条件
**/
final int xDist = Math.abs(mScroller.getFinalX() - mScroller.getCurrX());
final boolean finishedScrolling = (mScroller.isFinished() || xDistmTouchSlop);
if (finishedScrolling) {
mTouchState = TOUCH_STATE_REST;
mScroller.abortAnimation();
} else {
mTouchState = TOUCH_STATE_SCROLLING;
}
// check if this can be the beginning of a tap on the side of the pages
// to scroll the current page
if (mTouchState != TOUCH_STATE_PREV_PAGEmTouchState != TOUCH_STATE_NEXT_PAGE) {
if (getChildCount()0) {
if (hitsPreviousPage(x, y)) {
mTouchState = TOUCH_STATE_PREV_PAGE;
} else if (hitsNextPage(x, y)) {
mTouchState = TOUCH_STATE_NEXT_PAGE;
}
}
}
break;
}
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
mTouchState = TOUCH_STATE_REST;
mAllowLongPress = false;
mActivePointerId = INVALID_POINTER;
releaseVelocityTracker();
break;
case MotionEvent.ACTION_POINTER_UP:
onSecondaryPointerUp(ev);
releaseVelocityTracker();
break;
}
/**
* The only time we want to intercept motion events is if we are in the
* drag mode.
* 只有进入了滑动状态,才进行拦截,进入onTouchEvent执行滑动操作 。当mTouchState != TOUCH_STATE_REST
* 时,就说明没有进入滑动状态 。
**/
return mTouchState != TOUCH_STATE_REST;
}
2,onTouchEvent(MotionEvent en)
在这个方法中,执行各种关于滑动的工作的计算,界面的刷新等工作 。
[java] view plaincopy
public boolean onTouchEvent(MotionEvent ev) {
......
switch (actionMotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
/*
* If being flinged and user touches, stop the fling. isFinished
* will be false if being flinged.
*/
/**
* 如果Workspace此时已经被“掷出去”(靠惯性滑动) 。
* 此时发生ACTION_DOWN则需要停止滑动 。
*/
if (!mScroller.isFinished()) {
mScroller.abortAnimation();
}
// Remember where the motion event started
mDownMotionX = mLastMotionX = ev.getX();
mLastMotionXRemainder = 0;
mTotalMotionX = 0;
mActivePointerId = ev.getPointerId(0);
if (mTouchState == TOUCH_STATE_SCROLLING) {
pageBeginMoving();
}
break;
case MotionEvent.ACTION_MOVE:
if (mTouchState == TOUCH_STATE_SCROLLING) {
......
if (Math.abs(deltaX) = 1.0f) {
......
if (!mDeferScrollUpdate) {
//调用scrollBy滑动桌面
scrollBy((int) deltaX, 0);
......
} else {
......
}
mLastMotionX = x;
mLastMotionXRemainder = deltaX - (int) deltaX;
} else {
awakenScrollBars();
}
} else {
/**
* 如果条件满足 , 则进入滑动状态,开始滑动 。
*/
determineScrollingStart(ev);
}
break;
case MotionEvent.ACTION_UP:
if (mTouchState == TOUCH_STATE_SCROLLING) {
......
boolean isSignificantMove = Math.abs(deltaX)MIN_LENGTH_FOR_MOVE;
boolean returnToOriginalPage = false;
final int pageWidth = getScaledMeasuredWidth(getPageAt(mCurrentPage));
if (Math.abs(deltaX)pageWidth * RETURN_TO_ORIGINAL_PAGE_THRESHOLD
Math.signum(velocityX) != Math.signum(deltaX)) {
returnToOriginalPage = true;
}
boolean isFling = mTotalMotionXMIN_LENGTH_FOR_FLING
Math.abs(velocityX)snapVelocity;
int finalPage;
//判断拿起手指之后应该进入哪个分屏
if (((isSignificantMovedeltaX0!isFling) ||
(isFlingvelocityX0))mCurrentPage0) {
finalPage = returnToOriginalPage ? mCurrentPage : mCurrentPage - 1;
snapToPageWithVelocity(finalPage, velocityX);
} else if (((isSignificantMovedeltaX0!isFling) ||
(isFlingvelocityX0))
mCurrentPagegetChildCount() - 1) {
finalPage = returnToOriginalPage ? mCurrentPage : mCurrentPage1;
snapToPageWithVelocity(finalPage, velocityX);
} else {
snapToDestination();
}
} else if (mTouchState == TOUCH_STATE_PREV_PAGE) {
//直接进入前一屏
int nextPage = Math.max(0, mCurrentPage - 1);
if (nextPage != mCurrentPage) {
snapToPage(nextPage);
} else {
snapToDestination();
}
} else if (mTouchState == TOUCH_STATE_NEXT_PAGE) {
//直接进入后一屏
int nextPage = Math.min(getChildCount() - 1, mCurrentPage1);
if (nextPage != mCurrentPage) {
snapToPage(nextPage);
} else {
snapToDestination();
}
} else {
onUnhandledTap(ev);
}
mTouchState = TOUCH_STATE_REST;
mActivePointerId = INVALID_POINTER;
releaseVelocityTracker();
break;
case MotionEvent.ACTION_CANCEL:
if (mTouchState == TOUCH_STATE_SCROLLING) {
snapToDestination();
}
mTouchState = TOUCH_STATE_REST;
mActivePointerId = INVALID_POINTER;
releaseVelocityTracker();
break;
case MotionEvent.ACTION_POINTER_UP:
onSecondaryPointerUp(ev);
break;
}
return true;
}
【安卓JAVA滑动页面代码 android实现界面滑动xml】关于安卓JAVA滑动页面代码和android实现界面滑动xml的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读