效果

-------------------------------------------------------------------------------------------------------------------------------

素材

-------------------------------------------------------------------------------------------------------------------------------


activity_main.xml

-------------------------------------------------------------------------------------------------------------------------------


MainActivity.java

-------------------------------------------------------------------------------------------------------------------------------

packagecom.horizontalscrollView02;

importjava.util.Timer;

importjava.util.TimerTask;

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.os.Handler;

importandroid.os.Message;

importandroid.util.DisplayMetrics;

importandroid.view.View;

importandroid.widget.AdapterView;

importandroid.widget.AdapterView.OnItemSelectedListener;

importandroid.widget.HorizontalScrollView;

importandroid.widget.ImageView;

/**

*

*项目名称:com.horizontalscrollView02

*类名称:MainActivity

*类描述:幻灯片效果

*创建人:fy

*创建时间:2014-3-21下午4:53:31

*Copyright(c)方勇-版权所有

*/

publicclassMainActivityextendsActivity{

/*横向滚动菜单*/

privateHorizontalScrollViewhorizontalScrollView;

/*自定义画廊Gallery*/

privateMyGallerymGallery;

/*记录选中的图片位置*/

privateintindex=0;

/*记录幻灯片小圆点个数*/

privatestaticfinalintIMAGE_COUNT=3;

/*记录幻灯片圆点图片*/

privateImageView[]mImageViewIds;//小圆点ImageView数组

/*屏幕宽度(像素)*/

privateintwidth;

/*开一个线程执行耗时操作,用于更新主线程的UI控件*/

privateHandlerhandler=newHandler(){

@Override

publicvoidhandleMessage(Messagemsg){

super.handleMessage(msg);

switch(msg.what){

case2:

intpos=index%IMAGE_COUNT;

mGallery.setItemSelected(pos);

break;

default:

break;

}

}

};

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViews();

setListeners();

setScreens();

initViews();

}

/*手机屏幕属性*/

privatevoidsetScreens(){

//定义DisplayMetrics对象

DisplayMetricsmetric=newDisplayMetrics();

//取得窗口属性

getWindowManager().getDefaultDisplay().getMetrics(metric);

width=metric.widthPixels;//屏幕宽度(像素)

}

privatevoidfindViews(){

horizontalScrollView=(HorizontalScrollView)findViewById(R.id.hsv);

mGallery=(MyGallery)findViewById(R.id.gallery);

mImageViewIds=newImageView[]{(ImageView)findViewById(R.id.dot_1),(ImageView)findViewById(R.id.dot_2),

(ImageView)findViewById(R.id.dot_3)};

}

privatevoidsetListeners(){

/*设置小圆点显示,position会一直增加,如果要循环显示图片,需要对position取余,否则数组越界*/

mGallery.setOnItemSelectedListener(newOnItemSelectedListener(){

@Override

publicvoidonItemSelected(AdapterView<?>arg0,Viewarg1,intposition,longarg3){

//TODOAuto-generatedmethodstub

intpos=position%IMAGE_COUNT;

mImageViewIds[pos].setImageDrawable(getBaseContext().getResources().getDrawable(R.drawable.ic_dot_focused));

if(pos>0){

mImageViewIds[pos-1].setImageDrawable(getBaseContext().getResources().getDrawable(R.drawable.ic_dot_normal));

}

if(pos<(IMAGE_COUNT-1)){

//已经是最后一张图片了,重来(从0位置开始)

horizontalScrollView.scrollTo(0,0);

mImageViewIds[pos+1].setImageDrawable(getBaseContext().getResources().getDrawable(R.drawable.ic_dot_normal));

}

if(pos==0){

mImageViewIds[IMAGE_COUNT-1].setImageDrawable(getBaseContext().getResources().getDrawable(R.drawable.ic_dot_normal));

}

//移动X宽度=当前位置*屏幕宽度

horizontalScrollView.scrollTo(pos*width,0);

}

@Override

publicvoidonNothingSelected(AdapterView<?>parent){

}

});

}

/*初始化幻灯片小圆点、画廊、定时器*/

privatevoidinitViews(){

//默认选中

mImageViewIds[0].setImageDrawable(getBaseContext().getResources().getDrawable(R.drawable.ic_dot_focused));

ImageAdapteradapter=newImageAdapter(this);

//设置画廊Gallery适配器

mGallery.setAdapter(adapter);

//定时器,使用Message传递消息

Timertimer=newTimer();

//每隔2秒执行一次调度,延迟2秒执行

timer.schedule(newTimerTask(){

@Override

publicvoidrun(){

Messagemessage=newMessage();

message.what=2;

index=mGallery.getSelectedItemPosition();

index++;

handler.sendMessage(message);

}

},2000,2000);

}

}

ImageAdapter.java

-------------------------------------------------------------------------------------------------------------------------------

packagecom.horizontalscrollView02;

importandroid.content.Context;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.BaseAdapter;

importandroid.widget.ImageView;

/**

*

*项目名称:com.horizontalscrollView02

*类名称:ImageAdapter

*类描述:图片适配器

*创建人:fy

*创建时间:2014-3-21下午5:08:56

*Copyright(c)方勇-版权所有

*/

publicclassImageAdapterextendsBaseAdapter{

privateContextcontext;

privateint[]mImages={R.drawable.img001,R.drawable.img002,R.drawable.img003};

publicImageAdapter(Contextcontext){

this.context=context;

}

@Override

publicintgetCount(){

returnmImages.length;//实现循环显示

}

@Override

publicObjectgetItem(intposition){

returnposition;

}

@Override

publiclonggetItemId(intposition){

returnposition;

}

@Override

publicViewgetView(intposition,ViewconvertView,ViewGroupparent){

ImageViewimageView;

if(null==convertView){

imageView=newImageView(context);

}else{

imageView=(ImageView)convertView;

}

imageView.setImageResource(mImages[position]);

returnimageView;

}

}

MyGallery.java

-------------------------------------------------------------------------------------------------------------------------------

packagecom.horizontalscrollView02;

importandroid.content.Context;

importandroid.util.AttributeSet;

importandroid.view.MotionEvent;

importandroid.view.View;

importandroid.widget.AdapterView;

importandroid.widget.BaseAdapter;

importandroid.widget.LinearLayout;

importandroid.widget.Toast;

/**

*

*项目名称:com.horizontalscrollView02

*类名称:MyGallery

*类描述:自定义Gallery画廊

*创建人:fy

*创建时间:2014-3-21下午2:27:03

*Copyright(c)方勇-版权所有

*/

publicclassMyGalleryextendsLinearLayout{

/*上下文*/

privateContextmContext;

/*适配器*/

privateBaseAdapteradapter;

/*适配器-->条目选中事件*/

privateAdapterView.OnItemSelectedListeneronItemSelectedListener;

publicstaticintselectedId=0;

publicMyGallery(Contextcontext){

super(context);

mContext=context;

setOrientation(HORIZONTAL);

}

publicMyGallery(Contextcontext,AttributeSetattrs){

super(context,attrs);

mContext=context;

setOrientation(HORIZONTAL);

}

/*适配器-->设置数据*/

publicvoidsetAdapter(BaseAdapteradapter){

this.adapter=adapter;

//设置条目touch事件

for(inti=0;i<adapter.getCount();i++){

//条目

Viewview=adapter.getView(i,null,null);

//条目位置编号

finalintposition=i;

//条目ID

finallongid=adapter.getItemId(position);

//条目touch事件

view.setOnTouchListener(newOnTouchListener(){

@Override

publicbooleanonTouch(Viewv,MotionEventevent){

if(onItemSelectedListener!=null){

/**

*<p>Callbackmethodtobeinvokedwhenaniteminthisviewhasbeen

*selected.Thiscallbackisinvokedonlywhenthenewlyselected

*positionisdifferentfromthepreviouslyselectedpositionorif

*therewasnoselecteditem.</p>

*

*ImpelmenterscancallgetItemAtPosition(position)iftheyneedtoaccessthe

*dataassociatedwiththeselecteditem.

*

*@paramparentTheAdapterViewwheretheselectionhappened

*@paramviewTheviewwithintheAdapterViewthatwasclicked

*@parampositionThepositionoftheviewintheadapter

*@paramidTherowidoftheitemthatisselected

*/

onItemSelectedListener.onItemSelected(null,v,position,id);

}

//选中的位置

selectedId=position;

returntrue;

}

});

this.addView(view,newLinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));

}

}

publicvoidsetItemSelected(intposition){

Toast.makeText(mContext,""+position,Toast.LENGTH_SHORT).show();

//选中的位置

selectedId=position;

//选中的视图

Viewview=(View)adapter.getView(position,null,null);

onItemSelectedListener.onItemSelected(null,view,position,getItemIdAtPosition(position));

}

publicintgetSelectedItemPosition(){

returnselectedId;

}

publiclonggetItemIdAtPosition(intposition){

return(adapter==null||position<0)?null:adapter.getItemId(position);

}

publicvoidsetOnItemSelectedListener(AdapterView.OnItemSelectedListeneronItemSelectedListener){

this.onItemSelectedListener=onItemSelectedListener;

}

}

更多相关文章

  1. android studio自动提示文本框
  2. Android(安卓)ContentResolver 使用例子,读取联系人
  3. ExpandableListView 使用方法
  4. 带标题的RecyclerViewAdapter
  5. Android:ListView
  6. Kotlin简单开发-RecyclerView
  7. android GridView的应用举例
  8. 在android的spinner中,实现取VALUE值和TEXT值
  9. Android(安卓)Studio实现简单的购物商城界面

随机推荐

  1. 【android】安卓开发学习路线图
  2. [android] No resource found that match
  3. [hanchao3c]Android的MediaPlayer架构介
  4. Android 传感器 都有哪些?
  5. Android(安卓)一键退出APP 实现
  6. Android(安卓)使用librtmp推流【音视频传
  7. Android中SharedPreferences的基本使用
  8. Android中的Bundle类
  9. Android-Layout布局
  10. Android官方入门文档[16]创建一个Fragmen