Gallery实现首页图片滑动源码
2013-01-18 00:00
381 查看
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;
}
}
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;
}
}
}
相关文章推荐
- Android编程滑动效果之Gallery+GridView实现图片预览功能(附demo源码下载)
- 安卓复杂滑动案例 自定义behavior源码分析 实现头布局图片的缩放透明度变化,RecycleView的滑动布局,坐标变化
- 王立平--Gallery:实现图片的左右滑动
- Gallery实现图片文字左右滑动放大当前选中
- Android开发实现高仿优酷的客户端图片左右滑动切换功能实例【附源码下载】
- Gallery实现横向滑动图片
- 淘宝首页 图片滑动切换效果 基于jQuery的animate方法实现
- android Gallery组件实现的iPhone图片滑动效果实例
- 淘宝首页 图片滑动切换效果 基于CSS3的transition方法实现
- Android自定义“图片+文字”控件四种实现方法之一--------Gallery原理(提供源码下载)
- Swift - 使用CollectionView实现图片Gallery画廊效果(左右滑动浏览图片)
- Android遍历某个文件夹的图片并实现滑动查看的的Gallery
- Android gallery实现图片的左右循环旋转源码分享
- Android gallery实现图片的左右循环旋转源码分享
- Android遍历某个文件夹的图片并实现滑动查看的的Gallery
- Android gallery实现图片的左右循环旋转源码分享
- Hello, Views(一)Gallery滑动的图片(附源码下载)
- 王立平--Gallery:实现图片的左右滑动
- Hello, Views(一)Gallery滑动的图片(附源码下载)
- jquery 实现横向滑动自动切换源码(同时显示多张图片)