Gallery实现首页图片滑动源码

随声附和 提交于 2020-02-28 17:13:44
 
指示图片滑动标点View设置
package com.dream.myqiyi.widget;

import com.dream.myqiyi.Constans;
import com.dream.myqiyi.R;

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

public class FlowIndicator extends View {
	private int count;
	private float space, radius;
	private int point_normal_color, point_seleted_color;

	// 选中
	private int seleted = 0;

	// background seleted normal

	public FlowIndicator(Context context, AttributeSet attrs) {
		super(context, attrs);
		TypedArray a = 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);

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

	public void setSeletion(int index) {
		this.seleted = index;
		invalidate();
	}

	public void setCount(int count) {
		this.count = count;
		invalidate();
	}

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

	public void previous() {
		if (seleted > 0)
			seleted--;
		else
			seleted = count - 1;
		invalidate();
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		Paint paint = new Paint();
		paint.setAntiAlias(true);

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

		for (int i = 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
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		setMeasuredDimension(measureWidth(widthMeasureSpec),
				measureHeight(heightMeasureSpec));
	}

	private int measureWidth(int measureSpec) {
		int result = 0;
		int specMode = MeasureSpec.getMode(measureSpec);
		int specSize = 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);
			}
		}
		return result;
	}

	private int measureHeight(int measureSpec) {
		int result = 0;
		int specMode = MeasureSpec.getMode(measureSpec);
		int specSize = 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);
			}
		}
		return result;
	}

}
Gallery适配器设置

package com.dream.myqiyi.home;

import com.dream.myqiyi.R;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;

public class GalleryAdapter extends BaseAdapter {
 Context mContext;
 int[] res = new int[] { 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 };

 public GalleryAdapter(Context cnt) {
  this.mContext = cnt;
 }

 @Override
 public int getCount() {
  // TODO Auto-generated method stub
  return res.length;
 }

 @Override
 public Object getItem(int arg0) {
  // TODO Auto-generated method stub
  return null;
 }

 @Override
 public long getItemId(int arg0) {
  // TODO Auto-generated method stub
  return 0;
 }

 @Override
 public View getView(int arg0, View arg1, ViewGroup arg2) {
  // TODO Auto-generated method stub
  if (arg1 == null) {
   arg1 = LayoutInflater.from(mContext).inflate(R.layout.gallery_item,
     null);
  }
  ImageView img = (ImageView) arg1.findViewById(R.id.home_img);
  img.setImageResource(res[arg0]);
  return arg1;
 }
}

 
首页代码

package com.dream.myqiyi.home;

import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import com.dream.myqiyi.R;
import com.dream.myqiyi.widget.FlowIndicator;

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

public class HomeActivity extends Activity {
 static final int SCROLL_ACTION = 0;
 private static Boolean isExit = false;
 private static Boolean hasTask = false;
 ExpandableListView mExpandableListView;
 int[] tags = new int[] { 0, 0, 0, 0, 0 };
 String[] groups = new String[] { "同步剧场", "奇艺出品", "热播电影", "3月片花速递", "动漫乐园" };
 String[][] childs = new String[5][10];
 Gallery mGallery;
 GalleryAdapter mGalleryAdapter;
 FlowIndicator mMyView;
 private ExecutorService executorService;
 private Handler handler;
 private ProgressDialog progressDialog;
 //按2次返回键退出事件
 Timer mTimer;
 Timer tExit = new Timer();
 TimerTask task = new TimerTask() {
  
  @Override
  public void run() {
   // TODO Auto-generated method stub
   isExit = false;
   hasTask = true;
  }
 };
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  // TODO Auto-generated method stub
  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);
   }
  }
  return false;
 }
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.home_activity);
  ononein();
 }
 
 private void ononein() {
  // TODO Auto-generated method stub
  progressDialog = new ProgressDialog(getParent());// 生成一个进度条
  progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
  progressDialog.setTitle("请稍等");
  progressDialog.setMessage("正在读取数据中...");
  //建立线程异步加载数据
  executorService = Executors.newFixedThreadPool(4);
  handler = new GetHomeTimeLineHandler();
  executorService.submit(new GetHomeTimeLineThread());
  progressDialog.show();
 }
 
 private class GetHomeTimeLineHandler extends Handler {
  public void handleMessage(Message msg) {
   prepareView();
   mTimer = new Timer();
   //创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在 initialDelay 后开始执行,然后在initialDelay+period 后执行,接着在
   mTimer.scheduleAtFixedRate(new MyTask(), 0, 5000);
   progressDialog.dismiss();//关闭进度条
  }
 }
 private class GetHomeTimeLineThread implements Runnable{

  @Override
  public void run() {
   // TODO Auto-generated method stub
   try {
    Thread.sleep(2000);
    Message msg = handler.obtainMessage();// 通知线程来处理范围的数据
    msg.sendToTarget();
   } catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
   }
  }
  
 }

 private void prepareView() {
  mExpandableListView = (ExpandableListView) findViewById(R.id.expandableListView1);
  
  MyListAdapter adapter = new MyListAdapter();
  View header = 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 = new GalleryAdapter(this);
  mMyView.setCount(mGalleryAdapter.getCount());
  mGallery.setAdapter(mGalleryAdapter);
  mGallery.setOnItemSelectedListener(new OnItemSelectedListener() {

   @Override
   public void onItemSelected(AdapterView<?> arg0, View arg1,
     int arg2, long arg3) {
    // TODO Auto-generated method stub
    mMyView.setSeletion(arg2);
   }

   @Override
   public void onNothingSelected(AdapterView<?> arg0) {
    // TODO Auto-generated method stub
    
   }
  });
  mGallery.setOnItemClickListener(new OnItemClickListener() {

   @Override
   public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
     long arg3) {
    // TODO Auto-generated method stub
    //Toast.makeText(HomeActivity.this, String.valueOf(arg2), 300).show();
    Intent intent = new Intent(HomeActivity.this, ProimageActivity.class);
    startActivity(intent);
   }
  });
  mExpandableListView.addHeaderView(header);
  mExpandableListView.setAdapter(adapter);
  mExpandableListView
    .setOnGroupExpandListener(new OnGroupExpandListener() {

     @Override
     public void onGroupExpand(int arg0) {
      // TODO Auto-generated method stub
      tags[arg0] = 1;
     }
    });
  mExpandableListView
    .setOnGroupCollapseListener(new OnGroupCollapseListener() {

     @Override
     public void onGroupCollapse(int arg0) {
      // TODO Auto-generated method stub
      tags[arg0] = 0;
     }
    });
 }
 
 

 private class MyTask extends TimerTask {
  @Override
  public void run() {
   mHandler.sendEmptyMessage(SCROLL_ACTION);
  }
 }

 Handler mHandler = new Handler() {
  @Override
  public void handleMessage(Message msg) {
   // TODO Auto-generated method stub
   super.handleMessage(msg);
   switch (msg.what) {
   case SCROLL_ACTION:
    // int curPos = mGallery.getSelectedItemPosition();
    // if (curPos < mGalleryAdapter.getCount() - 1) {
    // curPos++;
    // } else {
    // curPos = 0;
    // }
    // // mGallery.setLayoutAnimation(new LayoutAnimationController(
    // // AnimationUtils.loadAnimation(HomeActivity.this,
    // // R.anim.gallery_in)));
    // mGallery.setSelection(curPos, true);
    MotionEvent e1 = MotionEvent.obtain(SystemClock.uptimeMillis(),
      SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN,
      89.333336f, 265.33334f, 0);
    MotionEvent e2 = MotionEvent.obtain(SystemClock.uptimeMillis(),
      SystemClock.uptimeMillis(), MotionEvent.ACTION_UP,
      300.0f, 238.00003f, 0);

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

   default:
    break;
   }
  }
 };

 class MyListAdapter extends BaseExpandableListAdapter {

  class GroupHolder {
   ImageView img,img2;
   TextView title;
   LinearLayout linlayout;
  }
  
  public MyListAdapter() {
   for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 10; j++) {
     childs[i][j] = "child" + i + "_" + j;
    }
   }
  }

  @Override
  public String getChild(int arg0, int arg1) {
   // TODO Auto-generated method stub
   return childs[arg0][arg1];
  }

  @Override
  public long getChildId(int arg0, int arg1) {
   // TODO Auto-generated method stub
   return 0;
  }

  @Override
  public View getChildView(final int arg0,final int arg1, boolean arg2, View arg3,
    ViewGroup arg4) {
   // TODO Auto-generated method stub
   GroupHolder groupHolder;
   if (arg3 == null) {
    groupHolder = new GroupHolder();
    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(new OnClickListener() {
     
     @Override
     public void onClick(View v) {
      // TODO Auto-generated method stub
      //Toast.makeText(HomeActivity.this, String.valueOf(arg0)+"-"+String.valueOf(arg1), 300).show();
      Intent htwo = new Intent(HomeActivity.this, HometwoActivity.class);
      htwo.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
      View vi = HomeGroup.group.getLocalActivityManager().startActivity("HometwoActivity", htwo).getDecorView();
      HomeGroup.group.replaceView(vi);
     }
    });
    groupHolder.img2.setOnClickListener(new OnClickListener() {
     
     @Override
     public void onClick(View v) {
      // TODO Auto-generated method stub
      //Toast.makeText(HomeActivity.this, String.valueOf(arg0)+"-"+String.valueOf(arg1), 300).show();
      Intent htwoo = new Intent(HomeActivity.this, HometwoActivity.class);
      htwoo.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
      View vii = HomeGroup.group.getLocalActivityManager().startActivity("HometwoActivity", htwoo).getDecorView();
      HomeGroup.group.replaceView(vii);
     }
    });
   }
   return arg3;
  }

  @Override
  public int getChildrenCount(int arg0) {
   // TODO Auto-generated method stub
   return 10;
  }

  @Override
  public Object getGroup(int arg0) {
   // TODO Auto-generated method stub
   return groups[arg0];
  }

  @Override
  public int getGroupCount() {
   // TODO Auto-generated method stub
   return groups.length;
  }

  @Override
  public long getGroupId(int arg0) {
   // TODO Auto-generated method stub
   return arg0;
  }
  
  @Override
  public View getGroupView(int arg0, boolean arg1, View arg2,
    ViewGroup arg3) {
   // TODO Auto-generated method stub
   GroupHolder groupHolder;
   if (arg2 == null) {
    arg2 = LayoutInflater.from(HomeActivity.this).inflate(
      R.layout.list_group_item, null);
    groupHolder = new GroupHolder();
    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]);
   
   return arg2;
  }

  @Override
  public boolean hasStableIds() {
   // TODO Auto-generated method stub
   return true;
  }

  @Override
  public boolean isChildSelectable(int arg0, int arg1) {
   // TODO Auto-generated method stub
   return true;
  }

 }

}

 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!