当前位置:  编程技术>移动开发
本页文章导读:
    ▪Gallery无限定时循环拖动成效        Gallery无限定时循环拖动效果 业务需要,需要在Gallery中实现定时循环滚动效果,而网上的大部分资料都是循环跳动,没有像屏幕拖动那种效果,经过几天的研究和资料整合,找出了解决方法.........
    ▪ Gallery异步加载图片跟listView动态刷新        Gallery异步加载图片和listView动态刷新 附件为eclipse项目,导入既可运行主要代码: 类1: public class InternetGalleryActivity extends Activity implements OnClickListener, OnFocusChangeListener { private Gallery myGaller.........
    ▪ Titanium兑现Menu键相关菜单实现       Titanium实现Menu键相关菜单实现     Titanium代码实现如下:     // this sets the background color of the master UIView (when there are no windows/tab groups on it) Titanium.UI.setBackgroundColor('#000'); var activity = Ti.Android.c.........

[1]Gallery无限定时循环拖动成效
    来源: 互联网  发布时间: 2014-02-18
Gallery无限定时循环拖动效果

业务需要,需要在Gallery中实现定时循环滚动效果,而网上的大部分资料都是循环跳动,没有像屏幕拖动那种效果,经过几天的研究和资料整合,找出了解决方法。

 

首先定时循环:

       ScheduledThreadPoolExecutor timer = (ScheduledThreadPoolExecutor) Executors

							.newScheduledThreadPool(1);
					ImageTask imageTask = new ImageTask();
					timer.scheduleAtFixedRate(imageTask, 0, 8, TimeUnit.SECONDS);
    private class ImageTask extends TimerTask {
        public void run() {
// getPos是我在imageAdapter中加入的方法,在ImageAdapter加一个成员变量position,然后在getView中将position
的值负值给成员变量,getPos()返回这个成员变量值
			int curPos = imageAdapter.getPos();
         Message message2 = new Message();
			Bundle data = new Bundle();
         data.putInt("pos", curPos);
         message2.what = 1;
			message2.setData(data);
			myHandler.sendMessage(message2);
    }
 

 

 

然后在Handler对象中处理:

 

      imageAdapter.setCount(focusList.size());

      focusGallery.setAdapter(imageAdapter);
 

      //注意,这两个事件是我模拟处理的,其中的数字是我用用手拖动然后用在实际Gallery的onFling事件Log打印出来的。

       想实现定时有一个假象的拖动动作,就模拟了这两个事件。

      MotionEvent e1 = MotionEvent.obtain(
							SystemClock.uptimeMillis(),
							SystemClock.uptimeMillis(),
							MotionEvent.ACTION_DOWN, 322.25406f, 108.34271f, 0);
					MotionEvent e2 = MotionEvent.obtain(
							SystemClock.uptimeMillis(),
							SystemClock.uptimeMillis(),
							MotionEvent.ACTION_MOVE, 146.52338f, 122.55939f, 0);
//这里一定要使用setSelection,否则每次都会从第一张图片滚动,也就是说只要速度正常,只出现第一张和第二张图片
选择当前图片,然后在当前位置下滚动。
					focusGallery.setSelection(msg.getData().getInt("pos"));
					if(firstLoad){
						firstLoad = false;
					}else{
//-945这个值可以自己测试做相应的调整,负值表示向右滑动
						focusGallery.onFling(e1, e2, -945, 0);
					}
					addHeaderPointImage(focusList.size());
}
 

然后在Gallery的Adapter中然getCount()返回Integer.MAX_VALUE;在getView中position参数进行如下处理

 

                                      int imageSize = focusList.size();

					position = position % imageSize;
 

然后就可以无限循环了。

最后处理一下那个圆点。

 

 

focusGallery.setOnItemSelectedListener(new OnItemSelectedListener() {
			public void onItemSelected(AdapterView<?> paramAdapterView,
					View paramView, int paramInt, long paramLong) {
				int curPos = imageAdapter.getPos();
				paramInt = curPos % focusList.size();
				Log.v("liuyx", curPos+"");
				for (int i = 0; i < pointImageList.size(); i++) {
					if (paramInt == i) {
						pointImageList.get(i).setImageResource(
								R.drawable.information_focus_cirlce_current);
					} else {
						pointImageList.get(i).setImageResource(
								R.drawable.information_focus_cirlce);
					}
				}
			}

			public void onNothingSelected(AdapterView<?> paramAdapterView) {
			}
		});
 

 

 

 

1 楼 xiaowangzaixian 2012-05-16  
有效果图吗,lz
2 楼 lyx2007825 2012-05-17  
我是在原先公司的项目里改的,你可以用个Gallery试试

    
[2] Gallery异步加载图片跟listView动态刷新
    来源: 互联网  发布时间: 2014-02-18
Gallery异步加载图片和listView动态刷新
附件为eclipse项目,导入既可运行
主要代码:
类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(/blog_article/imageURL[i]/index.html);
					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>

    
[3] Titanium兑现Menu键相关菜单实现
    来源: 互联网  发布时间: 2014-02-18
Titanium实现Menu键相关菜单实现

 

 

Titanium代码实现如下:

 

 

// this sets the background color of the master UIView (when there are no windows/tab groups on it)
Titanium.UI.setBackgroundColor('#000');

var activity = Ti.Android.currentActivity;
//
// create base UI tab and root window
//
var win = Titanium.UI.createWindow({  
    title:'Titanium Android ContextMenu使用'
});

win.backgroundColor = 'white';

var b1 = Ti.UI.createButton({
	title : '打开窗体',
	height : 'auto',
	width : 'auto'
});

// Here is an example of creating the menu handlers after window creation but before open.
b1.addEventListener('click', function(e) {
	var w = Ti.UI.createWindow({
		backgroundColor : 'blue',
		navBarHidden : false
	});

	w.activity.onCreateOptionsMenu = function(e) {
		var menu = e.menu;
		
		var m1 = menu.add({ title : '关闭窗体' });
		m1.addEventListener('click', function(e) {
			w.close();
		});
	};
	
	w.activity.onPrepareOptionsMenu = function(e) {
		var menu = e.menu;
		
		var mi = menu.findItem(2);
		if (mi == null) {
			mi = menu.add({
				itemId : 2,
				order : 1,
				title : '加载资源'
			});
			mi.addEventListener('click', function(e) {
				Ti.UI.createNotification({ message : "To you and yours." }).show();
			});
		}
	};
	
	var l = Ti.UI.createLabel({
		backgroundColor : 'white', color : 'black',
		width : 'auto', height : 'auto',
		text : '请点击Menu菜单按钮,窗体关闭'
	});
	w.add(l);
	
	w.open({ animated : true});
});

win.add(b1);
win.open();


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3