代码改变世界
2012-06-19 16:04
htc开发
阅读(257)
评论()
收藏
举报
-
类1:
-
public class InternetGalleryActivity extends Activity implements
-
OnClickListener, OnFocusChangeListener {
-
private Gallery myGallery;
-
InternetGalleryAdapter adapter;
-
Button bt, bt2;
-
-
// 只需要关心传入的图片地址
-
private String[] imageURL = new String[] {
-
"http://www.baidu.com/img/baidu_sylogo1.gif",
-
"http://misc.360buyimg.com/lib/img/e/logo.png",
-
"http://10.20.30.53:80/pic/cjk.jpg",
-
"http://10.20.30.53:80/pic/cjk2.jpg",
-
"http://img3.cache.netease.com/www/logo/logo_png.png", };
-
-
@Override
-
public void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
-
bt = (Button) findViewById(R.id.main_bt);
-
bt.setOnClickListener(this);
-
-
bt2 = (Button) findViewById(R.id.main_bt2);
-
bt2.setOnClickListener(this);
-
-
myGallery = (Gallery) findViewById(R.id.main_gallery);
-
adapter = new InternetGalleryAdapter(this, imageURL);
-
-
myGallery.setAdapter(adapter);
-
-
// 当焦点发生改变时加载后面的图片
-
myGallery.setOnFocusChangeListener(this);
-
-
}
-
-
/**
-
* 刷新相簿
-
*/
-
public void updateGallery() {
-
if (null != adapter) {
-
Log.d("lg", "notifyDataSetChanged");
-
adapter.notifyDataSetChanged();
-
}
-
}
-
-
@Override
-
public void onClick(View v) {
-
switch (v.getId()) {
-
case R.id.main_bt:
-
updateGallery();
-
break;
-
case R.id.main_bt2:
-
// 异步listView加载
-
Intent intent = new Intent();
-
intent.setClass(this, ListViewLoadActivity.class);
-
startActivity(intent);
-
break;
-
}
-
}
-
-
@Override
-
public void onFocusChange(View v, boolean hasFocus) {
-
-
}
-
-
@Override
-
protected void onDestroy() {
-
super.onDestroy();
-
}
-
}
-
-
adapter:
-
public class InternetGalleryAdapter extends BaseAdapter {
-
private Context context;
-
private String[] imageURL;
-
// private int mGalleryItemBackground;
-
private Bitmap[] Bitmaps;
-
-
public InternetGalleryAdapter(Context c, String[] imageURL) {
-
Log.d("lg", "InternetGalleryAdapter");
-
-
this.context = c;
-
this.imageURL = imageURL;
-
Bitmaps = new Bitmap[imageURL.length];
-
for (int i = 0; i < imageURL.length; i++) {
-
Resources res = context.getResources();
-
Bitmaps[i] = BitmapFactory.decodeResource(res,
-
R.drawable.ic_launcher);
-
}
-
-
// TypedArray a = c.obtainStyledAttributes(R.styleable.Gallery);
-
/* 取得Gallery属性的Index id */
-
// mGalleryItemBackground =
-
// a.getResourceId(R.styleable.Gallery_android_galleryItemBackground,
-
// 0);
-
// 让对象的styleable属性能够反复使用
-
// a.recycle();
-
-
PicLoadTask picLoadTask = new PicLoadTask();
-
picLoadTask.execute();
-
-
}
-
-
@Override
-
public int getCount() {
-
return imageURL.length;
-
}
-
-
@Override
-
public Object getItem(int position) {
-
return Bitmaps[position];
-
}
-
-
@Override
-
public long getItemId(int position) {
-
return position;
-
}
-
-
public float getScale(boolean focused, int offset) {
-
return Math.max(0, 1.0f / (float) Math.pow(2, Math.abs(offset)));
-
}
-
-
@Override
-
public View getView(int position, View convertView, ViewGroup parent) {
-
Log.d("lg", "getView");
-
ImageView imageView = new ImageView(context);
-
imageView.setImageBitmap(Bitmaps[position]);
-
-
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
-
imageView.setLayoutParams(new Gallery.LayoutParams(100,
-
LayoutParams.FILL_PARENT));
-
imageView.setPadding(0, 0, 0, 0);
-
// imageView.setBackgroundResource(mGalleryItemBackground);
-
return imageView;
-
}
-
-
// 很费时的io操作,用异步线程处理
-
class PicLoadTask extends AsyncTask<String, Integer, String> {
-
-
// String... 可变长的输入参数,与AsyncTask.exucute()对应
-
protected String doInBackground(String... params) {
-
// 这里采用一次性全部记载的方法,适合少量图片
-
for (int i = 0; i < imageURL.length; i++) {
-
try {
-
// 从网络获取图片
-
URL aryURI = new URL(imageURL[i]);
-
URLConnection conn = aryURI.openConnection();
-
conn.connect();
-
InputStream is = conn.getInputStream();
-
Bitmap bm = BitmapFactory.decodeStream(is);
-
Bitmaps[i] = bm;
-
cwjHandler.post(mUpdateResults); // 发布消息让主线程接收,实现异步线程和主线程的通信
-
// notifyDataSetChanged(); //不能直接调用ui操作,这样不是线程安全的
-
is.close();
-
Thread.sleep(1000); // 模拟延时
-
} catch (Exception e) {
-
// 处理异常,图片加载失败
-
Log.d("lg", e + "");
-
}
-
}
-
return null;
-
}
-
-
}
-
-
final Handler cwjHandler = new Handler();
-
-
final Runnable mUpdateResults = new Runnable() {
-
public void run() {
-
notifyDataSetChanged(); // 不能直接在AsyncTask中调用,因为不是线程安全的
-
}
-
};
-
}
-
-
类2:listViewLoad
-
public class ListViewLoadActivity extends ListActivity implements
-
OnScrollListener {
-
private LinearLayout mLoadLayout;
-
private ListView mListView;
-
private ListViewAdapter mListViewAdapter = new ListViewAdapter();
-
private int mLastItem = 0;
-
private int mCount = 41;
-
private final Handler mHandler = new Handler();
-
private final LayoutParams mProgressBarLayoutParams = new LinearLayout.LayoutParams(
-
LinearLayout.LayoutParams.WRAP_CONTENT,
-
LinearLayout.LayoutParams.WRAP_CONTENT);
-
private final LayoutParams mTipContentLayoutParams = new LinearLayout.LayoutParams(
-
LinearLayout.LayoutParams.WRAP_CONTENT,
-
LinearLayout.LayoutParams.WRAP_CONTENT);
-
-
@Override
-
public void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
/**
-
* "加载项"布局,此布局被添加到ListView的Footer中。
-
*/
-
mLoadLayout = new LinearLayout(this);
-
mLoadLayout.setMinimumHeight(60);
-
mLoadLayout.setGravity(Gravity.CENTER);
-
mLoadLayout.setOrientation(LinearLayout.HORIZONTAL);
-
/**
-
* 向"加载项"布局中添加一个圆型进度条。
-
*/
-
ProgressBar mProgressBar = new ProgressBar(this);
-
mProgressBar.setPadding(0, 0, 15, 0);
-
mLoadLayout.addView(mProgressBar, mProgressBarLayoutParams);
-
/**
-
* 向"加载项"布局中添加提示信息。
-
*/
-
TextView mTipContent = new TextView(this);
-
mTipContent.setText("加载中...");
-
mLoadLayout.addView(mTipContent, mTipContentLayoutParams);
-
/**
-
* 获取ListView组件,并将"加载项"布局添加到ListView组件的Footer中。
-
*/
-
mListView = getListView();
-
mListView.addFooterView(mLoadLayout);
-
/**
-
* 组ListView组件设置Adapter,并设置滑动监听事件。
-
*/
-
setListAdapter(mListViewAdapter);
-
mListView.setOnScrollListener(this);
-
}
-
-
public void onScroll(AbsListView view, int mFirstVisibleItem,
-
int mVisibleItemCount, int mTotalItemCount) {
-
mLastItem = mFirstVisibleItem + mVisibleItemCount - 1;
-
if (mListViewAdapter.count > mCount) {
-
mListView.removeFooterView(mLoadLayout);
-
}
-
}
-
-
public void onScrollStateChanged(AbsListView view, int mScrollState) {
-
/**
-
* 当ListView滑动到最后一条记录时这时,我们会看到已经被添加到ListView的"加载项"布局, 这时应该加载剩余数据。
-
*/
-
if (mLastItem == mListViewAdapter.count
-
&& mScrollState == OnScrollListener.SCROLL_STATE_IDLE) {
-
if (mListViewAdapter.count <= mCount) {
-
mHandler.postDelayed(new Runnable() {
-
@Override
-
public void run() {
-
mListViewAdapter.count += 10;
-
mListViewAdapter.notifyDataSetChanged();
-
mListView.setSelection(mLastItem);
-
}
-
}, 1000);
-
}
-
}
-
}
-
-
class ListViewAdapter extends BaseAdapter {
-
int count = 10;
-
-
public int getCount() {
-
return count;
-
}
-
-
public Object getItem(int position) {
-
return position;
-
}
-
-
public long getItemId(int position) {
-
return position;
-
}
-
-
public View getView(int position, View view, ViewGroup parent) {
-
TextView mTextView;
-
if (view == null) {
-
mTextView = new TextView(ListViewLoadActivity.this);
-
} else {
-
mTextView = (TextView) view;
-
}
-
mTextView.setText("Item " + position);
-
mTextView.setTextSize(20f);
-
mTextView.setGravity(Gravity.CENTER);
-
mTextView.setHeight(60);
-
return mTextView;
-
}
-
}
-
-
}
-
-
mainlayout:
-
<?xml version="1.0" encoding="utf-8"?>
-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-
android:layout_width="fill_parent"
-
android:layout_height="fill_parent"
-
android:background="#ffffff"
-
android:orientation="vertical" >
-
-
<TextView
-
android:layout_width="fill_parent"
-
android:layout_height="wrap_content"
-
android:text="@string/hello" />
-
-
<Gallery
-
android:id="@+id/main_gallery"
-
android:layout_width="fill_parent"
-
android:layout_height="80dp"
-
android:background="#55000000"
-
android:spacing="1dp" />
-
-
<Button
-
android:id="@+id/main_bt"
-
android:layout_width="fill_parent"
-
android:layout_height="wrap_content"
-
android:text="@string/hello" >
-
</Button>
-
-
<Button
-
android:id="@+id/main_bt2"
-
android:layout_width="fill_parent"
-
android:layout_height="wrap_content"
-
android:text="@string/hello" >
-
</Button>
-
-
</LinearLayout>