• 自己主动旋转木马,自己主动作为幻灯片标题类似或图片


    特征:ListView没有滚动不时有一段距离的时间自己主动,当滚动到底部,从头显示再次启动。类别似原始数据0123,本卷起来的012301230123...曾多次显示,这实现了信息的功能转盘。

    该功能使用扩展ListView实现,

    public class AutoCircleScrollListview extends ListView implements OnScrollListener{
    	public final static int REFRESH_TIMES=1000;//滚动频率,单位毫秒
    	public final static int SCROLL_DISTANCE=10;//每次滚动距离,单位是pixels
    	private Handler mHandler=new Handler();
    	private RefreshRunnable mRefreshRunnable;
    	private boolean isStop=false;
    	
    	public AutoCircleScrollListview(Context context) {
    		super(context);
    		init();
    	}
    	public AutoCircleScrollListview(Context context, AttributeSet attrs) {
    		super(context, attrs);
    		init();
    	}
    	
    	private void init(){
    		//设置滚动监听器
    		setOnScrollListener(this);
    		//不显示滚动栏
    		setVerticalScrollBarEnabled(false);
    		setHorizontalScrollBarEnabled(false);
    		//不可触摸
    		setEnabled(false);
    	}
    	/**
    	 * 開始滚动
    	 */
    	public void startRoll(){
    		isStop=false;
    		setSelection(getCount()/AutoCircleScrollAdapter.REPEAT_TIMES);
    		if(mRefreshRunnable==null){
    			mRefreshRunnable=new RefreshRunnable();
    		}
    		mHandler.postDelayed(mRefreshRunnable, REFRESH_TIMES);
    	}
    	/**
    	 * 停止滚动
    	 */
    	private void stopRoll(){
    		isStop=true;
    		if(mRefreshRunnable!=null){
    			mHandler.removeCallbacks(mRefreshRunnable);
    		}
    		mRefreshRunnable=null;
    	}
    	/**
    	 * 
    	 * @Create_date 2014-10-24 下午1:02:50
    	 * @TODO
    	 */
    	private class RefreshRunnable implements Runnable{
    
    		@Override
    		public void run() {
    			if(!isStop){
    				smoothScrollBy(SCROLL_DISTANCE, 0);
    				mHandler.postDelayed(this, REFRESH_TIMES);
    			}
    		}
    		
    	}
    	
    	@Override
    	public void onScroll(AbsListView view, int firstVisibleItem,
    			int visibleItemCount, int totalItemCount) {
    		if (firstVisibleItem <= 2) {//到顶部
    			int listSize=getCount()/AutoCircleScrollAdapter.REPEAT_TIMES;
    			setSelection(listSize + 2);
    		} else if (firstVisibleItem + visibleItemCount > getCount() - 2) {//究竟部
    			int listSize=getCount()/AutoCircleScrollAdapter.REPEAT_TIMES;
    			setSelection(firstVisibleItem - listSize);
    		}
    	}
    	@Override
    	public void onScrollStateChanged(AbsListView view, int scrollState) {
    		
    	}
    	
    	public void onStop(){
    		stopRoll();
    	}
    	
    	public void onResume(){
    		if(isStop){
    			startRoll();
    		}
    	}
    	public void onDestroy(){
    		stopRoll();
    	}
    }
    适配器

    public class AutoCircleScrollAdapter extends BaseAdapter {
    	/**
    	 * 循环展示量,最理想的值为3
    	 */
    	public static final int REPEAT_TIMES = 3;
    	private List<Map<String, Object>> mDatas;
    	private int mLayoutId;
    	private String[] mFrom;
    	private int[] mTo;
    	private Context mContext;
    
    	public AutoCircleScrollAdapter(Context context, int resLayoutId,
    			String[] from, int[] to, List<Map<String, Object>> datas) {
    		this.mContext = context;
    		this.mDatas = datas;
    		this.mLayoutId = resLayoutId;
    		this.mFrom = from;
    		this.mTo = to;
    	}
    
    	/**
    	 * 将数据循环展示三遍
    	 */
    	@Override
    	public int getCount() {
    		if (mDatas != null) {
    			return mDatas.size() * REPEAT_TIMES;
    		}
    		return 0;
    	}
    
    	@Override
    	public Object getItem(int arg0) {
    
    		return mDatas.get(arg0 % mDatas.size());
    	}
    
    	@Override
    	public long getItemId(int arg0) {
    		return arg0 % mDatas.size();
    	}
    
    	@Override
    	public View getView(int postition, View convertView, ViewGroup arg2) {
    		View v;
    		if (convertView == null) {
    			v = LayoutInflater.from(mContext).inflate(mLayoutId, null);
    		} else {
    			v = convertView;
    		}
    		bindView(v, postition);
    		return v;
    	}
    
    	private void bindView(View view, int position) {
    		final Map<String, Object> dataSet = mDatas.get(position%mDatas.size());
    		if (dataSet == null) {
    			return;
    		}
    		final String[] from = mFrom;
    		final int[] to = mTo;
    		final int count = to.length;
    		for (int i = 0; i < count; i++) {
    			final View v = view.findViewById(to[i]);
    			if (v != null) {
    				String clzzName = v.getClass().getSimpleName();
    				if (clzzName.equals("TextView")) {// 设置文本框内容
    					final Object data = dataSet.get(from[i]);
    					String text = data == null ? "" : data.toString();
    					if (text == null) {
    						text = "";
    					}
    					((TextView) v).setText(text);
    				}else {//在此能够拓展自己的view
    					
    				}
    			}
    		}
    	}
    }

    使用

    public class MainActivity extends Activity {
    	AutoCircleScrollListview mAutoCircleScrollListview;
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		mAutoCircleScrollListview=(AutoCircleScrollListview) findViewById(R.id.lv_autoCircleScroll);
    		List<Map<String, Object>> datas=new ArrayList<Map<String,Object>>();
    		for (int i = 0; i < 5; i++) {
    			Map<String, Object> map=new HashMap<String, Object>();
    			map.put("txt_tire_index", ""+i);
    			map.put("txt_pressure_value", "1"+i+".0");
    			map.put("txt_tmper_valude", "01"+i+"'C");
    			datas.add(map);
    		}
    		AutoCircleScrollAdapter adapter=new AutoCircleScrollAdapter(
    				this, 
    				R.layout.item_auto_circle_scroll_listview, 
    				new String[]{"txt_tire_index","txt_pressure_value","txt_tmper_valude"}, 
    				new int[]{R.id.txt_tire_index,R.id.txt_pressure_value,R.id.txt_tmper_valude}, 
    				datas);
    		mAutoCircleScrollListview.setAdapter(adapter);
    		mAutoCircleScrollListview.startRoll();
    	}
    	
    	@Override
    	protected void onDestroy() {
    		// TODO Auto-generated method stub
    		super.onDestroy();
    		mAutoCircleScrollListview.onDestroy();
    	}
    	@Override
    	protected void onResume() {
    		// TODO Auto-generated method stub
    		super.onResume();
    		mAutoCircleScrollListview.onResume();
    	}
    	@Override
    	protected void onStop() {
    		// TODO Auto-generated method stub
    		super.onStop();
    		mAutoCircleScrollListview.onStop();
    	}
    
    }

    Demo下载

    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    bzoj2006[NOI2010]超级钢琴
    bzoj1088[SCOI2005]扫雷
    bzoj1207[HNOI2004]打鼹鼠
    bzoj2132圈地计划
    bzoj2127happiness
    bzoj1037[ZJOI2008]生日聚会
    bzoj1031[JSOI2007]字符加密
    bzoj1566[noi2009]管道取珠
    bzoj2134单选错位
    vuejs之v-on小例子之实现购买数量的增加和减少
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4653524.html
Copyright © 2020-2023  润新知