GridView 左右翻页的实现

package com.boyue.dreamsetting;

import java.io.FileOutputStream;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;

import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;

import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.Environment;
import android.os.IBinder;
import android.provider.Settings;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.ViewGroup.MarginLayoutParams;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.CheckBox;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.TextView;

import com.boyue.adapter.DreamAdapter;
import com.boyue.bean.Picture;
import com.boyue.dreamsetting.ScreenService.FileBinder;
import com.boyue.imagehandler.Comic;
import com.boyue.util.XmlUitl;

/**
 * 
 * @description: TODO
 * @author: guo
 * @time: Dec 10, 2015 11:34:37 AM
 */
public class MainActivity extends Activity implements OnTouchListener,
		OnGestureListener {

	private final static String UPDATE_SCREEN_ACTION = "com.boyue.dreamsetting.service";
	private final static String DREAM_PATH = Environment
			.getExternalStorageDirectory().getPath() + "/ScreenSaver";
	private final static String SELECTED_IMAGE_FILE_NAME = DREAM_PATH
			+ "/image.xml";
	private ScreenService mScreenService;
	private GridView mGridView;
	private LinearLayout title_ll;
	private DreamAdapter mDreamAdapter;
	private ArrayList<Picture> mDreamData; // 已经选择作为壁纸的图片集合
	private ArrayList<Picture> mPictureData; // 某个目录下所有的图片数据集合
	private ArrayList<Picture> mPageData; // 某页显示的数据集合
	private GestureDetector gestureDetector_;
	private Comic mComic;
	private int totalPage_; // 总共页数
	private int currentPage_ = 1; // 当前页数
	private int itemPerPage_ = 9; // 每页Item数

	private int countPage = 0; // 计量当前已经翻几页了
	private int settingCnt = 0; // 系统设置几页刷新
	private int index = 0; // 某条数据在图片数据集合中的索引

	/** 定交ServiceConnection,用于绑定Service的 */
	private ServiceConnection mConnection = new ServiceConnection() {

		public void onServiceConnected(ComponentName className, IBinder service) {
			// 已经绑定了LocalService,强转IBinder对象,调用方法得到LocalService对象
			FileBinder binder = (FileBinder) service;
			mScreenService = binder.getService();
			init();
		}

		public void onServiceDisconnected(ComponentName arg0) {
			mScreenService = null;
		}
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		gestureDetector_ = new GestureDetector(this);
		mGridView = (GridView) findViewById(R.id.myGrid);
		title_ll = (LinearLayout) findViewById(R.id.title_ll);
		title_ll.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				finish();
			}
		});
		Intent intent = new Intent();
		intent.setClass(this, ScreenService.class);
		bindService(intent, mConnection, BIND_AUTO_CREATE);
	}

	private void init() {
		mComic = mScreenService.getComic();
		mPictureData = mScreenService.getPictureDatas(mComic);
		updatePictureState(); // 获取已经选中的图片,并设置其状态
		fillViewData();
		gridViewListenerInit();

	}

	private void updatePictureState() {
		// 获得待机图片的集合
		mDreamData = XmlUitl.domResolveXML(SELECTED_IMAGE_FILE_NAME);
		for (Picture picture : mDreamData) {
			mPictureData.get(picture.getPosition()).setChecked(true);
		}
	}

	public void gridViewListenerInit() {
		mGridView.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				// TODO Auto-generated method stub
				CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkbox);
				checkBox.toggle();
				Picture picture = mPictureData.get((currentPage_ - 1)
						* itemPerPage_ + position);
				if (checkBox.isChecked()) {
					picture.setChecked(true);
					mDreamData.add(picture);
				} else {
					picture.setChecked(false);
					for (int i = 0; i < mDreamData.size(); i++) {
						if (mDreamData.get(i).getPosition() == picture
								.getPosition()) {
							mDreamData.remove(i);
						}
					}
				}
			    mDreamAdapter.notifyDataSetChanged();
			}
			});
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		try {
			settingCnt = Settings.System.getInt(getContentResolver(),
					"fullscreen_flush");
		} catch (Exception e) {
			// TODO: handle exception
		}
		super.onResume();
	}

	@Override
	protected void onRestart() {
		// TODO Auto-generated method stub
		updateView();
		super.onRestart();
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();

	}

	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		Log.i("gcy", "mDreamData.size = " + mDreamData.size());
		createImageXML(mDreamData);
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		Log.i("gcy", "MainActivity onDestroy()---");
		super.onDestroy();
		if (mConnection != null) {
			unbindService(mConnection);
		}
	}

	public String createImageXML(List<Picture> datas) {
		StringWriter xmlWriter = new StringWriter();
		try {
			SAXTransformerFactory factory = (SAXTransformerFactory) SAXTransformerFactory
					.newInstance();
			TransformerHandler handler = factory.newTransformerHandler();

			Transformer transformer = handler.getTransformer(); // 设置xml属性
			transformer.setOutputProperty(OutputKeys.INDENT, "yes");
			transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
			transformer.setOutputProperty(OutputKeys.VERSION, "1.0");

			StreamResult result = new StreamResult(xmlWriter); // 保存创建的xml
			handler.setResult(result);

			handler.startDocument();
			AttributesImpl attr = new AttributesImpl();

			attr.clear();
			attr.addAttribute("", "", "author", "", "gcy");
			attr.addAttribute("", "", "date", "", "2015-12-15");
			handler.startElement("", "", "root", attr);

			int size = datas.size();
			for (int i = 0; i < size; i++) {
				attr.clear();
				handler.startElement("", "", "image", attr);

				attr.clear();
				handler.startElement("", "", "path", attr);
				String path = datas.get(i).getPath() + "";
				handler.characters(path.toCharArray(), 0, path.length());
				handler.endElement("", "", "path");

				attr.clear();
				handler.startElement("", "", "name", attr);
				String name = datas.get(i).getName();
				handler.characters(name.toCharArray(), 0, name.length());
				handler.endElement("", "", "name");

				attr.clear();
				handler.startElement("", "", "position", attr);
				int positon = datas.get(i).getPosition();
				handler.characters((String.valueOf(positon)).toCharArray(), 0,
						(String.valueOf(positon)).length());
				handler.endElement("", "", "position");

				handler.endElement("", "", "image");
			}

			handler.endElement("", "", "root");
			handler.endDocument();

		} catch (TransformerFactoryConfigurationError e) { // SAXTransformerFactory.newInstance
			e.printStackTrace();
		} catch (TransformerConfigurationException e) { // factory.newTransformerHandler
			e.printStackTrace();
		} catch (IllegalArgumentException e) { // transformer.setOutputProperty
			e.printStackTrace();
		} catch (SAXException e) { // handler.startDocument
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}

		savedXML(SELECTED_IMAGE_FILE_NAME, xmlWriter.toString());
		return xmlWriter.toString();
	}

	// 写数据
	public void savedXML(String fileName, String writestr) {
		try {
			FileOutputStream fout = new FileOutputStream(fileName);
			byte[] bytes = writestr.getBytes();
			fout.write(bytes);
			fout.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public boolean onDown(MotionEvent e) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void onShowPress(MotionEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public boolean onSingleTapUp(MotionEvent e) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
			float distanceY) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void onLongPress(MotionEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
			float velocityY) {
		float distance = e1.getX() - e2.getX(); // 横向位移
		if (Math.abs(distance) > Utils.FLING_MIN_DISTANCE) {
			if (distance > 0)// nextPage
			{
				if (currentPage_ == totalPage_) {
					currentPage_ = 1;
				} else {
					currentPage_++;
				}

				countPage++;
				if (countPage >= settingCnt) {
					getWindow().getDecorView().invalidate(-1010, -1010, -1010,
							-1010);
					countPage = 0;
				}
				updateView();

			} else {
				if (currentPage_ > 1) {
					currentPage_--;
				} else {
					currentPage_ = totalPage_;
				}
				countPage++;
				if (countPage >= settingCnt) {
					getWindow().getDecorView().invalidate(-1010, -1010, -1010,
							-1010);
					countPage = 0;
				}
				updateView();
			}
		}

		return false;
	}

	@Override
	public boolean onTouch(View v, MotionEvent event) {
		// TODO Auto-generated method stub
		return gestureDetector_.onTouchEvent(event);
	}

	public boolean dispatchTouchEvent(MotionEvent event) {
		if (gestureDetector_.onTouchEvent(event)) {
			event.setAction(MotionEvent.ACTION_CANCEL);
		}
		return super.dispatchTouchEvent(event);
	}

	private synchronized void updateView() {
		clearViewData(); // 清除当前页的数据
		fillViewData(); // 重新添加数据
	}

	private void clearViewData() {
		mGridView.removeAllViewsInLayout();
	}

	private void fillViewData() {

		if (mPageData != null) {
			// for (int j = 0; j < mPageData.size(); j++) {
			// Object value = mPageData.get(j).getThumbnailBitmap();
			// if (value != null) {
			// if (!(value instanceof Integer)) {
			// Bitmap bitmap = (Bitmap) value;
			// bitmap.recycle();
			// bitmap = null;
			// }
			// }
			// }
			mPageData.clear();
		} else {
			mPageData = new ArrayList<Picture>();
		}

		for (int i = 0; i < itemPerPage_; i++) {
			index = (currentPage_ - 1) * itemPerPage_ + i;
			if (0 == mPictureData.size()
					|| i + (currentPage_ - 1) * itemPerPage_ >= mPictureData
							.size() || null == mPictureData.get(index)) {
				break;
			}
			Picture picture = mPictureData.get(index);
			mPageData.add(picture);
		}

		mDreamAdapter = new DreamAdapter(mGridView,this, mPageData);
		mGridView.setAdapter(mDreamAdapter);
		
		gridViewListenerInit();
		setPageText();

	}

	private void setPageText() {
		totalPage_ = (itemPerPage_ + mPictureData.size() - 1) / itemPerPage_;
		if (0 == totalPage_) {
			totalPage_ = 1;
		}

		TextView pageTextView = (TextView) findViewById(R.id.PageTextView);
		String pageTextString = String.valueOf(currentPage_) + " / "
				+ String.valueOf(totalPage_);
		pageTextView.setText(pageTextString);
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值