android实现uc和墨迹天气那样的左右拖动效果.docx
《android实现uc和墨迹天气那样的左右拖动效果.docx》由会员分享,可在线阅读,更多相关《android实现uc和墨迹天气那样的左右拖动效果.docx(23页珍藏版)》请在冰豆网上搜索。
![android实现uc和墨迹天气那样的左右拖动效果.docx](https://file1.bdocx.com/fileroot1/2023-1/9/a5357c3e-4273-4dea-858e-58f8102f4c19/a5357c3e-4273-4dea-858e-58f8102f4c191.gif)
android实现uc和墨迹天气那样的左右拖动效果
[代码]FlingGalleryActivity
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.content.Context;
importandroid.graphics.Color;
importandroid.util.Log;
importandroid.view.Gravity;
importandroid.view.MotionEvent;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.view.View.OnClickListener;
importandroid.widget.ArrayAdapter;
importandroid.widget.Button;
importandroid.widget.CheckBox;
importandroid.widget.EditText;
importandroid.widget.LinearLayout;
importandroid.widget.TableLayout;
importandroid.widget.TextView;
publicclassFlingGalleryActivityextendsActivity
{
privatefinalintcolor_red=Color.argb(100,200,0,0);
privatefinalintcolor_green=Color.argb(100,0,200,0);
privatefinalintcolor_blue=Color.argb(100,0,0,200);
privatefinalintcolor_yellow=Color.argb(100,200,200,0);
privatefinalintcolor_purple=Color.argb(100,200,0,200);
privatefinalString[]mLabelArray={"View1","View2","View3","View4","View5"};
privatefinalint[]mColorArray={color_red,color_green,color_blue,color_yellow,color_purple};
privateFlingGallerymGallery;
privateCheckBoxmCheckBox;
//Note:
Thefollowinghandleriscriticaltocorrectfunctionof
//theFlingGalleryclass.ThisenablestheFlingGalleryclassto
//detectwhenthemotioneventhasendedbyfingerbeinglifted
@Override
publicbooleanonTouchEvent(MotionEventevent)
{
returnmGallery.onGalleryTouchEvent(event);
}
publicvoidonCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
mGallery=newFlingGallery(this);
mGallery.setPaddingWidth(5);
mGallery.setAdapter(newArrayAdapter(getApplicationContext(),android.R.layout.simple_list_item_1,mLabelArray)
{
@Override
publicViewgetView(intposition,ViewconvertView,ViewGroupparent)
{
Log.d("111","count="+position);
//if(convertView!
=null&&convertViewinstanceofGalleryViewItem)
//{
//GalleryViewItemgalleryView=(GalleryViewItem)convertView;
//
//galleryView.mEdit1.setText("");
//galleryView.mText1.setText(mLabelArray[position]);
//galleryView.mText1.setBackgroundColor(mColorArray[position]);
//galleryView.mText2.setText(mLabelArray[position]);
//galleryView.mText2.setBackgroundColor(mColorArray[position]);
//
//Log.d("111","count="+position);
//
//returngalleryView;
//
//}
returnnewGalleryViewItem(getApplicationContext(),position);
}
});
LinearLayoutlayout=newLinearLayout(getApplicationContext());
layout.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParamslayoutParams=newLinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
layoutParams.setMargins(10,10,10,10);
layoutParams.weight=1.0f;
layout.addView(mGallery,layoutParams);
mCheckBox=newCheckBox(getApplicationContext());
mCheckBox.setText("GalleryisCircular");
mCheckBox.setText("GalleryisCircular");
mCheckBox.setPadding(50,10,0,10);
mCheckBox.setTextSize(30);
mCheckBox.setChecked(true);
mCheckBox.setOnClickListener(newOnClickListener()
{
@Override
publicvoidonClick(Viewview)
{
mGallery.setIsGalleryCircular(mCheckBox.isChecked());
}
});
layout.addView(mCheckBox,newLinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
setContentView(layout);
}
privateclassGalleryViewItemextendsTableLayout
{
privateEditTextmEdit1;
privateTextViewmText1;
privateTextViewmText2;
privateButtonmButton1;
privateButtonmButton2;
publicGalleryViewItem(Contextcontext,intposition)
{
super(context);
this.setOrientation(LinearLayout.VERTICAL);
this.setLayoutParams(newLinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT));
mEdit1=newEditText(context);
this.addView(mEdit1,newLinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
mText1=newTextView(context);
mText1.setText(mLabelArray[position]);
mText1.setTextSize(30);
mText1.setGravity(Gravity.LEFT);
mText1.setBackgroundColor(mColorArray[position]);
this.addView(mText1,newLinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
mButton1=newButton(context);
mButton1.setText("<<");
mButton1.setGravity(Gravity.LEFT);
mButton1.setOnClickListener(newOnClickListener()
{
@Override
publicvoidonClick(Viewview)
{
mGallery.movePrevious();
}
});
this.addView(mButton1,newLinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
mButton2=newButton(context);
mButton2.setText(">>");
mButton2.setGravity(Gravity.RIGHT);
mButton2.setOnClickListener(newOnClickListener()
{
@Override
publicvoidonClick(Viewview)
{
mGallery.moveNext();
}
});
this.addView(mButton2,newLinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
mText2=newTextView(context);
mText2.setText(mLabelArray[position]);
mText2.setTextSize(30);
mText2.setGravity(Gravity.RIGHT);
mText2.setBackgroundColor(mColorArray[position]);
this.addView(mText2,newLinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT,1));
}
}
}
[代码]FlingGallery
importandroid.content.Context;
importandroid.view.GestureDetector;
importandroid.view.KeyEvent;
importandroid.view.MotionEvent;
importandroid.view.View;
importandroid.view.animation.Animation;
importandroid.view.animation.AnimationUtils;
importandroid.view.animation.Interpolator;
importandroid.view.animation.Transformation;
importandroid.widget.Adapter;
importandroid.widget.FrameLayout;
importandroid.widget.LinearLayout;
//TODO:
//1.InordertoimproveperformanceCachescreenbitmapanduseforanimation
//2.Establishsuperfluousmemoryallocationsanddelayorreplacewithreusedobjects
//Probablyneedtomakesurewearenotallocatingobjects(strings,etc.)inloops
publicclassFlingGalleryextendsFrameLayout
{
//Constants
privatefinalintswipe_min_distance=120;
privatefinalintswipe_max_off_path=250;
privatefinalintswipe_threshold_veloicty=400;
//Properties
privateintmViewPaddingWidth=0;
privateintmAnimationDuration=250;
privatefloatmSnapBorderRatio=0.5f;
privatebooleanmIsGalleryCircular=true;
//Members
privateintmGalleryWidth=0;
privatebooleanmIsTouched=false;
privatebooleanmIsDragging=false;
privatefloatmCurrentOffset=0.0f;
privatelongmScrollTimestamp=0;
privateintmFlingDirection=0;
privateintmCurrentPosition=0;
privateintmCurrentViewNumber=0;
privateContextmContext;
privateAdaptermAdapter;
privateFlingGalleryView[]mViews;
privateFlingGalleryAnimationmAnimation;
privateGestureDetectormGestureDetector;
privateInterpolatormDecelerateInterpolater;
publicFlingGallery(Contextcontext)
{
super(context);
mContext=context;
mAdapter=null;
mViews=newFlingGalleryView[3];
mViews[0]=newFlingGalleryView(0,this);
mViews[1]=newFlingGalleryView(1,this);
mViews[2]=newFlingGalleryView(2,this);
mAnimation=newFlingGalleryAnimation();
mGestureDetector=newGestureDetector(newFlingGestureDetector());
mDecelerateInterpolater=AnimationUtils.loadInterpolator(mContext,android.R.anim.decelerate_interpolator);
}
publicvoidsetPaddingWidth(intviewPaddingWidth)
{
mViewPaddingWidth=viewPaddingWidth;
}
publicvoidsetAnimationDuration(intanimationDuration)
{
mAnimationDuration=animationDuration;
}
publicvoidsetSnapBorderRatio(floatsnapBorderRatio)
{
mSnapBorderRatio=snapBorderRatio;
}
publicvoidsetIsGalleryCircular(booleanisGalleryCircular)
{
if(mIsGalleryCircular!
=isGalleryCircular)
{
mIsGalleryCircular=isGalleryCircular;
if(mCurrentPosition==getFirstPosition())
{
//Weneedtoreloadtheviewimmediatelytothelefttochangeittocircularvieworblank
mViews[getPrevViewNumber(mCurrentViewNumber)].recycleView(getPrevPosition(mCurrentPosition));
}
if(mCurrentPosition==getLastPosition())
{
//Weneedtoreloadtheviewimmediatelytotherighttochangeittocircularvieworblank
mViews[getNextViewNumber(mCurrentViewNumber)].recycleView(getNextPosition(mCurrentPosition));
}
}
}
publicintgetGalleryCount()
{
return(mAdapter==null)?
0:
mAdapter.getCount();
}
publicintgetFirstPosition()
{
return0;
}
publicintgetLastPosition()
{
return(getGalleryCount()==0)?
0:
getGalleryCount()-1;
}
privateintgetPrevPosition(intrelativePosition)
{
intprevPosition=relativePosition-1;
if(prevPosition{
prevPosition=getFirstPosition()-1;
if(mIsGalleryCircular==true)
{
prevPosition=getLastPosition();
}
}
returnprevPosition;
}
privateintgetNextPosition(intrelativePosition)
{
intnextPosition=relativePosition+1;
if(nextPosition>getLastPosition())
{
nextPosition=getLastPosition()+1;
if(mIsGalleryCircular==true)
{
nextPosition=getFirstPosition();
}
}
returnnextPosition;
}
privateintgetPrevViewNumber(intrelativeViewNumber)
{
return(relativeViewNumber==0)?
2:
relativeViewNumber-1;
}
privateintgetNextViewNumber(intrelativeViewNumber)
{
return