您的位置:首页 > 其它

Gallery实现首页图片滑动源码

2013-01-18 00:00 381 查看

指示图片滑动标点View设置
packagecom.dream.myqiyi.widget;

importcom.dream.myqiyi.Constans;
importcom.dream.myqiyi.R;

importandroid.content.Context;
importandroid.content.res.TypedArray;
importandroid.graphics.Canvas;
importandroid.graphics.Paint;
importandroid.util.AttributeSet;
importandroid.util.Log;
importandroid.view.View;

publicclassFlowIndicatorextendsView{
privateintcount;
privatefloatspace,radius;
privateintpoint_normal_color,point_seleted_color;

//选中
privateintseleted=0;

//backgroundseletednormal

publicFlowIndicator(Contextcontext,AttributeSetattrs){
super(context,attrs);
TypedArraya=context.obtainStyledAttributes(attrs,
R.styleable.FlowIndicator);

count=a.getInteger(R.styleable.FlowIndicator_count,4);
space=a.getDimension(R.styleable.FlowIndicator_space,9);
radius=a.getDimension(R.styleable.FlowIndicator_point_radius,9);

point_normal_color=a.getColor(
R.styleable.FlowIndicator_point_normal_color,0x000000);
point_seleted_color=a.getColor(
R.styleable.FlowIndicator_point_seleted_color,0xffff07);

intsum=attrs.getAttributeCount();
if(Constans.DEBUG){
Stringstr="";
for(inti=0;i<sum;i++){
Stringname=attrs.getAttributeName(i);
Stringvalue=attrs.getAttributeValue(i);
str+="attr_name:"+name+":"+value+"\n";
}
Log.i("attribute",str);
}
a.recycle();
}

publicvoidsetSeletion(intindex){
this.seleted=index;
invalidate();
}

publicvoidsetCount(intcount){
this.count=count;
invalidate();
}

publicvoidnext(){
if(seleted<count-1)
seleted++;
else
seleted=0;
invalidate();
}

publicvoidprevious(){
if(seleted>0)
seleted--;
else
seleted=count-1;
invalidate();
}

@Override
protectedvoidonDraw(Canvascanvas){
super.onDraw(canvas);
Paintpaint=newPaint();
paint.setAntiAlias(true);

floatwidth=(getWidth()-((radius*2*count)+(space*(count-1))))/2.f;

for(inti=0;i<count;i++){
if(i==seleted)
paint.setColor(point_seleted_color);
else
paint.setColor(point_normal_color);
canvas.drawCircle(width+getPaddingLeft()+radius+i
*(space+radius+radius),getHeight()/2,radius,paint);

}
}

@Override
protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){
setMeasuredDimension(measureWidth(widthMeasureSpec),
measureHeight(heightMeasureSpec));
}

privateintmeasureWidth(intmeasureSpec){
intresult=0;
intspecMode=MeasureSpec.getMode(measureSpec);
intspecSize=MeasureSpec.getSize(measureSpec);

if(specMode==MeasureSpec.EXACTLY){
result=specSize;
}else{
result=(int)(getPaddingLeft()+getPaddingRight()
+(count*2*radius)+(count-1)*radius+1);
if(specMode==MeasureSpec.AT_MOST){
result=Math.min(result,specSize);
}
}
returnresult;
}

privateintmeasureHeight(intmeasureSpec){
intresult=0;
intspecMode=MeasureSpec.getMode(measureSpec);
intspecSize=MeasureSpec.getSize(measureSpec);

if(specMode==MeasureSpec.EXACTLY){
result=specSize;
}else{
result=(int)(2*radius+getPaddingTop()+getPaddingBottom()+1);
if(specMode==MeasureSpec.AT_MOST){
result=Math.min(result,specSize);
}
}
returnresult;
}

}
Gallery适配器设置
packagecom.dream.myqiyi.home;

importcom.dream.myqiyi.R;

importandroid.content.Context;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.BaseAdapter;
importandroid.widget.ImageView;

publicclassGalleryAdapterextendsBaseAdapter{
ContextmContext;
int[]res=newint[]{R.drawable.t1,R.drawable.t2,R.drawable.t3,
R.drawable.t1,R.drawable.t2,R.drawable.t3,R.drawable.t1,
R.drawable.t2,R.drawable.t3};

publicGalleryAdapter(Contextcnt){
this.mContext=cnt;
}

@Override
publicintgetCount(){
//TODOAuto-generatedmethodstub
returnres.length;
}

@Override
publicObjectgetItem(intarg0){
//TODOAuto-generatedmethodstub
returnnull;
}

@Override
publiclonggetItemId(intarg0){
//TODOAuto-generatedmethodstub
return0;
}

@Override
publicViewgetView(intarg0,Viewarg1,ViewGrouparg2){
//TODOAuto-generatedmethodstub
if(arg1==null){
arg1=LayoutInflater.from(mContext).inflate(R.layout.gallery_item,
null);
}
ImageViewimg=(ImageView)arg1.findViewById(R.id.home_img);
img.setImageResource(res[arg0]);
returnarg1;
}
}


首页代码
packagecom.dream.myqiyi.home;

importjava.util.Timer;
importjava.util.TimerTask;
importjava.util.concurrent.ExecutorService;
importjava.util.concurrent.Executors;

importcom.dream.myqiyi.R;
importcom.dream.myqiyi.widget.FlowIndicator;

importandroid.app.Activity;
importandroid.app.ProgressDialog;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.os.SystemClock;
importandroid.view.KeyEvent;
importandroid.view.LayoutInflater;
importandroid.view.MotionEvent;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.view.ViewGroup;
importandroid.widget.AdapterView;
importandroid.widget.AdapterView.OnItemClickListener;
importandroid.widget.AdapterView.OnItemSelectedListener;
importandroid.widget.BaseExpandableListAdapter;
importandroid.widget.ExpandableListView;
importandroid.widget.Gallery;
importandroid.widget.ImageView;
importandroid.widget.ExpandableListView.OnGroupCollapseListener;
importandroid.widget.ExpandableListView.OnGroupExpandListener;
importandroid.widget.LinearLayout;
importandroid.widget.TextView;
importandroid.widget.Toast;

publicclassHomeActivityextendsActivity{
staticfinalintSCROLL_ACTION=0;
privatestaticBooleanisExit=false;
privatestaticBooleanhasTask=false;
ExpandableListViewmExpandableListView;
int[]tags=newint[]{0,0,0,0,0};
String[]groups=newString[]{"同步剧场","奇艺出品","热播电影","3月片花速递","动漫乐园"};
String[][]childs=newString[5][10];
GallerymGallery;
GalleryAdaptermGalleryAdapter;
FlowIndicatormMyView;
privateExecutorServiceexecutorService;
privateHandlerhandler;
privateProgressDialogprogressDialog;
//按2次返回键退出事件
TimermTimer;
TimertExit=newTimer();
TimerTasktask=newTimerTask(){

@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
isExit=false;
hasTask=true;
}
};
@Override
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
//TODOAuto-generatedmethodstub
if(keyCode==KeyEvent.KEYCODE_BACK){
if(isExit==false){
isExit=true;
Toast.makeText(this,"再按一次退出程序",Toast.LENGTH_SHORT).show();
if(!hasTask){
tExit.schedule(task,2000);
}
}else{
finish();
System.exit(0);
}
}
returnfalse;
}

@Override
protectedvoidonCreate(BundlesavedInstanceState){
//TODOAuto-generatedmethodstub
super.onCreate(savedInstanceState);
setContentView(R.layout.home_activity);
ononein();
}

privatevoidononein(){
//TODOAuto-generatedmethodstub
progressDialog=newProgressDialog(getParent());//生成一个进度条
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setTitle("请稍等");
progressDialog.setMessage("正在读取数据中...");
//建立线程异步加载数据
executorService=Executors.newFixedThreadPool(4);
handler=newGetHomeTimeLineHandler();
executorService.submit(newGetHomeTimeLineThread());
progressDialog.show();
}

privateclassGetHomeTimeLineHandlerextendsHandler{
publicvoidhandleMessage(Messagemsg){
prepareView();
mTimer=newTimer();
//创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在initialDelay后开始执行,然后在initialDelay+period后执行,接着在
mTimer.scheduleAtFixedRate(newMyTask(),0,5000);
progressDialog.dismiss();//关闭进度条
}
}
privateclassGetHomeTimeLineThreadimplementsRunnable{

@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
try{
Thread.sleep(2000);
Messagemsg=handler.obtainMessage();//通知线程来处理范围的数据
msg.sendToTarget();
}catch(Exceptione){
//TODO:handleexception
e.printStackTrace();
}
}

}

privatevoidprepareView(){
mExpandableListView=(ExpandableListView)findViewById(R.id.expandableListView1);

MyListAdapteradapter=newMyListAdapter();
Viewheader=LayoutInflater.from(this).inflate(R.layout.header_view,
null);
mGallery=(Gallery)header.findViewById(R.id.home_gallery);
mMyView=(FlowIndicator)header.findViewById(R.id.myView);
mGalleryAdapter=newGalleryAdapter(this);
mMyView.setCount(mGalleryAdapter.getCount());
mGallery.setAdapter(mGalleryAdapter);
mGallery.setOnItemSelectedListener(newOnItemSelectedListener(){

@Override
publicvoidonItemSelected(AdapterView<?>arg0,Viewarg1,
intarg2,longarg3){
//TODOAuto-generatedmethodstub
mMyView.setSeletion(arg2);
}

@Override
publicvoidonNothingSelected(AdapterView<?>arg0){
//TODOAuto-generatedmethodstub

}
});
mGallery.setOnItemClickListener(newOnItemClickListener(){

@Override
publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,
longarg3){
//TODOAuto-generatedmethodstub
//Toast.makeText(HomeActivity.this,String.valueOf(arg2),300).show();
Intentintent=newIntent(HomeActivity.this,ProimageActivity.class);
startActivity(intent);
}
});
mExpandableListView.addHeaderView(header);
mExpandableListView.setAdapter(adapter);
mExpandableListView
.setOnGroupExpandListener(newOnGroupExpandListener(){

@Override
publicvoidonGroupExpand(intarg0){
//TODOAuto-generatedmethodstub
tags[arg0]=1;
}
});
mExpandableListView
.setOnGroupCollapseListener(newOnGroupCollapseListener(){

@Override
publicvoidonGroupCollapse(intarg0){
//TODOAuto-generatedmethodstub
tags[arg0]=0;
}
});
}

privateclassMyTaskextendsTimerTask{
@Override
publicvoidrun(){
mHandler.sendEmptyMessage(SCROLL_ACTION);
}
}

HandlermHandler=newHandler(){
@Override
publicvoidhandleMessage(Messagemsg){
//TODOAuto-generatedmethodstub
super.handleMessage(msg);
switch(msg.what){
caseSCROLL_ACTION:
//intcurPos=mGallery.getSelectedItemPosition();
//if(curPos<mGalleryAdapter.getCount()-1){
//curPos++;
//}else{
//curPos=0;
//}
////mGallery.setLayoutAnimation(newLayoutAnimationController(
////AnimationUtils.loadAnimation(HomeActivity.this,
////R.anim.gallery_in)));
//mGallery.setSelection(curPos,true);
MotionEvente1=MotionEvent.obtain(SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(),MotionEvent.ACTION_DOWN,
89.333336f,265.33334f,0);
MotionEvente2=MotionEvent.obtain(SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(),MotionEvent.ACTION_UP,
300.0f,238.00003f,0);

mGallery.onFling(e1,e2,-1300,0);
break;

default:
break;
}
}
};

classMyListAdapterextendsBaseExpandableListAdapter{

classGroupHolder{
ImageViewimg,img2;
TextViewtitle;
LinearLayoutlinlayout;
}

publicMyListAdapter(){
for(inti=0;i<5;i++){
for(intj=0;j<10;j++){
childs[i][j]="child"+i+"_"+j;
}
}
}

@Override
publicStringgetChild(intarg0,intarg1){
//TODOAuto-generatedmethodstub
returnchilds[arg0][arg1];
}

@Override
publiclonggetChildId(intarg0,intarg1){
//TODOAuto-generatedmethodstub
return0;
}

@Override
publicViewgetChildView(finalintarg0,finalintarg1,booleanarg2,Viewarg3,
ViewGrouparg4){
//TODOAuto-generatedmethodstub
GroupHoldergroupHolder;
if(arg3==null){
groupHolder=newGroupHolder();
arg3=LayoutInflater.from(HomeActivity.this).inflate(
R.layout.list_child_item,null);
groupHolder.linlayout=(LinearLayout)arg3.findViewById(R.id.linearLayout1);
groupHolder.img2=(ImageView)arg3.findViewById(R.id.imageView2);
groupHolder.linlayout.setOnClickListener(newOnClickListener(){

@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
//Toast.makeText(HomeActivity.this,String.valueOf(arg0)+"-"+String.valueOf(arg1),300).show();
Intenthtwo=newIntent(HomeActivity.this,HometwoActivity.class);
htwo.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Viewvi=HomeGroup.group.getLocalActivityManager().startActivity("HometwoActivity",htwo).getDecorView();
HomeGroup.group.replaceView(vi);
}
});
groupHolder.img2.setOnClickListener(newOnClickListener(){

@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
//Toast.makeText(HomeActivity.this,String.valueOf(arg0)+"-"+String.valueOf(arg1),300).show();
Intenthtwoo=newIntent(HomeActivity.this,HometwoActivity.class);
htwoo.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Viewvii=HomeGroup.group.getLocalActivityManager().startActivity("HometwoActivity",htwoo).getDecorView();
HomeGroup.group.replaceView(vii);
}
});
}
returnarg3;
}

@Override
publicintgetChildrenCount(intarg0){
//TODOAuto-generatedmethodstub
return10;
}

@Override
publicObjectgetGroup(intarg0){
//TODOAuto-generatedmethodstub
returngroups[arg0];
}

@Override
publicintgetGroupCount(){
//TODOAuto-generatedmethodstub
returngroups.length;
}

@Override
publiclonggetGroupId(intarg0){
//TODOAuto-generatedmethodstub
returnarg0;
}

@Override
publicViewgetGroupView(intarg0,booleanarg1,Viewarg2,
ViewGrouparg3){
//TODOAuto-generatedmethodstub
GroupHoldergroupHolder;
if(arg2==null){
arg2=LayoutInflater.from(HomeActivity.this).inflate(
R.layout.list_group_item,null);
groupHolder=newGroupHolder();
groupHolder.img=(ImageView)arg2.findViewById(R.id.tag_img);
groupHolder.title=(TextView)arg2
.findViewById(R.id.title_view);
arg2.setTag(groupHolder);
}else{
groupHolder=(GroupHolder)arg2.getTag();
}
if(tags[arg0]==0){
groupHolder.img
.setImageResource(R.drawable.list_indecator_button);
}else{
groupHolder.img
.setImageResource(R.drawable.list_indecator_button_down);
}

groupHolder.title.setText(groups[arg0]);

returnarg2;
}

@Override
publicbooleanhasStableIds(){
//TODOAuto-generatedmethodstub
returntrue;
}

@Override
publicbooleanisChildSelectable(intarg0,intarg1){
//TODOAuto-generatedmethodstub
returntrue;
}

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Gallery 图片滑动