过期Gallery取代方案horizontalscrollView之幻灯片效果
效果
-------------------------------------------------------------------------------------------------------------------------------
素材
-------------------------------------------------------------------------------------------------------------------------------
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;
}
}
更多相关文章
- android studio自动提示文本框
- Android(安卓)ContentResolver 使用例子,读取联系人
- ExpandableListView 使用方法
- 带标题的RecyclerViewAdapter
- Android:ListView
- Kotlin简单开发-RecyclerView
- android GridView的应用举例
- 在android的spinner中,实现取VALUE值和TEXT值
- Android(安卓)Studio实现简单的购物商城界面