当前位置:  编程技术>移动开发
本页文章导读:
    ▪openGLES学习札记——变换坐标系的函数glLoadIdentity()、glTranslatef()和glRotatef()        openGLES学习笔记——变换坐标系的函数glLoadIdentity()、glTranslatef()和glRotatef()   glLoadIdentity() 将当前的用户坐标系的原点移到了屏幕中心:类似于一个复位操作1.X坐标轴从左至右,Y坐标轴从下.........
    ▪ ListView 分页展示        ListView 分页显示 ListView是Android中经常用到的一个控件,用来以列表的形式展示数据,但是当数据量过大时,会出现数据加载过慢,甚至是失去响应,我们可以用分页显示来处理这个问题。 .........
    ▪ 关于 view 中 GONE、VISIBLE、INVISIBLE 的差异       关于 view 中 GONE、VISIBLE、INVISIBLE 的区别 这两天开始我不得不说我收获很大,因为之前没有怎么做UI,现在我开始接触这一块的东西,却是让我对UI 的这一块有了很大的收获,也许是我太菜.........

[1]openGLES学习札记——变换坐标系的函数glLoadIdentity()、glTranslatef()和glRotatef()
    来源: 互联网  发布时间: 2014-02-18
openGLES学习笔记——变换坐标系的函数glLoadIdentity()、glTranslatef()和glRotatef()

 

glLoadIdentity()


将当前的用户坐标系的原点移到了屏幕中心:类似于一个复位操作
1.X坐标轴从左至右,Y坐标轴从下至上,Z坐标轴从里至外。
2.OpenGL屏幕中心的坐标值是X和Y轴上的0.0f点。
3.中心左面的坐标值是负值,右面是正值。
   移向屏幕顶端是正值,移向屏幕底端是负值。
   移入屏幕深处是负值,移出屏幕则是正值。

 

glTranslatef(x, y, z)

沿着 X, Y 和 Z 轴移动。

注意在glTranslatef(x, y, z)中,当您移动的时候,您并不是相对屏幕中心移动,而是相对与当前所在的屏幕位置。其作用就是将你绘点坐标的原点在当前原点的基础上平移一个(x,y,z)向量。

 

glRotatef(angle, x, y, z)
与glTranslatef(x, y, z)类似,glRotatef(angle, x, y, z)也是对坐标系进行操作。
旋转轴经过原点,方向为(x,y,z),旋转角度为angle,方向满足右手定则。

 

即以向量(x,y,z)为轴旋转angle个角度,那么旋转方向如何判定呢? 
用右手法则来判定,对,说的就是电磁场里的右手法则,即将张开右手掌,朝上,大拇指指向向量方向,然后四手指往里握成拳,四手指旋转的方向即旋转方向。注意,如果angle为负值,方向则反。

 

 


    
[2] ListView 分页展示
    来源: 互联网  发布时间: 2014-02-18
ListView 分页显示

ListView是Android中经常用到的一个控件,用来以列表的形式展示数据,但是当数据量过大时,会出现数据加载过慢,甚至是失去响应,我们可以用分页显示来处理这个问题。

下面的代码是我结合网上的资源整合的结果,感谢网友们的无私奉献!

实现思路,主要是监听scroll事件,加载新数据。

 

下面是代码:

  package com.ns.pagelist;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.AbsListView.OnScrollListener;

public class PagesListActivity extends Activity implements OnClickListener,OnScrollListener{
	
	private ListView pageListView;
	private Button btnPre;
	private Button btnNext;
	
	private PageAdapter pageAdapter;//
	private static int laseItem = 0;
	private static int nowpage = 1;
	private List<Map<String, Object>> mData;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        pageListView = (ListView)findViewById(R.id.page_list);
        btnPre = (Button)findViewById(R.id.buttonPre);
        btnNext = (Button)findViewById(R.id.buttonNext);
        
        //构建Loading布局
        LinearLayout searchLayout = new LinearLayout(this);
		// 水平方向的线性布局
		searchLayout.setOrientation(LinearLayout.HORIZONTAL);
		// 添加进度条
		ProgressBar progressBar = new ProgressBar(this);
		progressBar.setPadding(0, 0, 15, 0);
		searchLayout.addView(progressBar, new LinearLayout.LayoutParams(
				LinearLayout.LayoutParams.WRAP_CONTENT,
				LinearLayout.LayoutParams.WRAP_CONTENT));

		// 添加文字,设置文字垂直居中
		TextView textView = new TextView(this);
		textView.setText("加载中...");
		textView.setGravity(Gravity.CENTER_VERTICAL);
		searchLayout.addView(textView, new LinearLayout.LayoutParams(
				LinearLayout.LayoutParams.FILL_PARENT,
				LinearLayout.LayoutParams.FILL_PARENT));

		// 同时将进展条和加载文字显示在中间
		searchLayout.setGravity(Gravity.CENTER);

		LinearLayout loadingLayout = new LinearLayout(this);
		loadingLayout.addView(searchLayout, new LinearLayout.LayoutParams(
				LinearLayout.LayoutParams.WRAP_CONTENT,
				LinearLayout.LayoutParams.WRAP_CONTENT));

		loadingLayout.setGravity(Gravity.CENTER);
		// 加载到listActivity的底部
		pageListView.addFooterView(loadingLayout);
		pageListView.setOnScrollListener(this);

		mData = getData();
        
        pageAdapter = new PageAdapter(this);
        pageListView.setAdapter(pageAdapter);
        btnPre.setOnClickListener(this);
        btnNext.setOnClickListener(this);
        checkButton();
        
        
    }
    
  //点击左边的Button,表示向前翻页,索引值要减1.  
    public void leftView(){  
        nowpage--; 
        for (int i = 0; i < 10; i++) {
			mData.remove(mData.size() - 1);
		}
        //刷新ListView里面的数值。           
        pageAdapter.notifyDataSetChanged(); 
        
        pageListView.setSelection((nowpage - 1)*10 + 1);
          
        //检查Button是否可用。  
        checkButton();  
    }       
  //点击右边的Button,表示向后翻页,索引值要加1.  
    public void rightView(){  
    	nowpage++;
		mData.addAll(getData());
          
        //刷新ListView里面的数值。  
        pageAdapter.notifyDataSetChanged(); 
        pageListView.setSelection((nowpage - 1)*10 + 1);
          
        //检查Button是否可用。  
        checkButton();  
    }  
      
    public void checkButton(){  
        //索引值小于等于1,表示不能向前翻页了,以经到了第一页了。         //将向前翻页的按钮设为不可用。  
        if(nowpage <=1){  
            btnPre.setEnabled(false);  
        }  
        /*//值的长度减去前几页的长度,剩下的就是这一页的长度,如果这一页的长度比View_Count小,表示这是最后的一页了,后面在没有了。  
        //将向后翻页的按钮设为不可用。  
        else if(data.length - index*viewCount <= viewCount){  
            btnNext.setEnabled(false);  
        }*/  
          
        //否则将2个按钮都设为可用的。  
        else {  
           btnPre.setEnabled(true);  
           btnNext.setEnabled(true);  
        }  
          
    } 
    
    
    //自定义Adapter
    class PageAdapter extends BaseAdapter{
    	private LayoutInflater mInflater;
    	
    	public PageAdapter(Context context) {
			this.mInflater = LayoutInflater.from(context);
		}

		@Override
		public int getCount() {
            return mData.size(); 
		}

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

		@Override
		public long getItemId(int position) {
			return position;
		}

		public final class ViewHolder {
			public ImageView img;
			public TextView title;
			public TextView info;
		}
		
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			
			ViewHolder holder = null;
			if (convertView == null) {
				holder = new ViewHolder();
				convertView = mInflater.inflate(R.layout.mylistitem, null);
				holder.img = (ImageView) convertView.findViewById(R.id.img);
				holder.title = (TextView) convertView.findViewById(R.id.title);
				holder.info = (TextView) convertView.findViewById(R.id.info);
				convertView.setTag(holder);
			} else {
				holder = (ViewHolder) convertView.getTag();
			}
			holder.img.setBackgroundResource((Integer) mData.get(position).get("img"));
			holder.title.setText((String) mData.get(position).get("title"));
			holder.info.setText((String) mData.get(position).get("info"));

			return convertView;
		}
    	
    }

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.buttonPre:
			leftView();
			break;

		case R.id.buttonNext:
			rightView();
			break;
		}
		
	}

	//监听Scroll事件,实现分页显示的关键
	@Override
	public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {
		//获取当前页面最后一条数据的位置
		laseItem = firstVisibleItem + visibleItemCount - 1;
		
	}

	@Override
	public void onScrollStateChanged(AbsListView view, int scrollState) {
		
		//如果用户已经滚到最后一条数据,并且已经松手,则加载新的数据
		if (laseItem == pageAdapter.getCount() && scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
			nowpage++;
			mData.addAll(getData());
			pageAdapter.notifyDataSetChanged();
			checkButton();
		}
		
	}
	
	private List<Map<String, Object>> getData() {
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

		for (int i = 0; i < 10; i++) {
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("title", nowpage + "ItEye" + (i + 1));
			map.put("info","独立之人格,自由之思想,如果视图正在滚动,此方法将被调用之前,滚动下一帧呈现。特别是,它会被调用之前调用getView。。。。。" + (i + 1));
			map.put("img", R.drawable.ic_launcher);
			list.add(map);
		}
		return list;
	}
}

 

下面是运行后的截图:


 

    
[3] 关于 view 中 GONE、VISIBLE、INVISIBLE 的差异
    来源: 互联网  发布时间: 2014-02-18
关于 view 中 GONE、VISIBLE、INVISIBLE 的区别
这两天开始我不得不说我收获很大,因为之前没有怎么做UI,现在我开始接触这一块的东西,却是让我对UI 的这一块有了很大的收获,也许是我太菜。。。。。

好吧,直接说 组件的中的 显示 与不显示 还有gone 的区别:

其实很简单,如果你把 你的组件setVisibility(View.VISIBLE),着我们都很清楚就是让 组件显示了,
如果我们设置setVisibility(View.INVISIBLE),从字面意思上我们理解是 不显示,确实结果是不显示但是在layout 的xml 中 这个组件还是会把相应的位置 给占 出来,这样和我们的布局就有点不同了,当然 你可以试试 setVisibility(View.GONE),这个东西是 组件不显示 而且也不会占用 xml 中的 位置!

    
最新技术文章:
▪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