当前位置:  编程技术>移动开发
本页文章导读:
    ▪ListView飞入加载item及滑动剔除item        ListView飞入加载item及滑动删除item 现在已经是10月28号晚上近11点,原本打算是11点就睡觉的,看样子是不行了,因为还没有洗澡,明天又要上班了。弄完这个demo,有点小兴奋,一会洗澡看比赛.........
    ▪ mac上终端出现command not found现象解决        mac下终端出现command not found现象解决1 .可能是你的指令输错了。。 2.可能装了ruby等工具造成了命令路径更改。执行以下命令行进行修复默认路径。 a.终端输入cd b.输入touch .bash_profile c.输入open .........
    ▪ 旧版本Xcode工程在Xcode4.5上真机无法调试有关问题的解决       旧版本Xcode工程在Xcode4.5下真机无法调试问题的解决iOS6发布不久后,Xcode4.5也发布了。于是第一时间下载安装,并将之前安装的XCode删除了。后来一直用着没事,近来有个旧项目要修改有些bug.........

[1]ListView飞入加载item及滑动剔除item
    来源: 互联网  发布时间: 2014-02-18
ListView飞入加载item及滑动删除item

现在已经是10月28号晚上近11点,原本打算是11点就睡觉的,看样子是不行了,因为还没有洗澡,明天又要上班了。弄完这个demo,有点小兴奋,一会洗澡看比赛。

好吧,我承认我是个比较关注时事的程序员,所以我的微博上面转发的时事微博要远远多于关于技术微博。http://weibo.com/u/1832139851,这是我的微博。感兴趣的朋友可以互粉一下。这两天,宁波人民为了自己的利益走向街头,这不是今年的第一起因为环境安全问题引发的群体事件,而政府的举措还是愚蠢之极,让人感到愤慨,当然,他们并不是愚蠢,他们只是不能接受人民从臣民转换为公民。借用一句”不明真相之际,鸡蛋和石头的较量中,我永远站在鸡蛋一边”来表明自己的态度。祝福宁波人民。

        好吧,下面进入正题:

在listview中,可以加入动画使其效果更炫一点。这个demo修改至网上下载的一个版本,改动还算比较大。因为有动画,所以不好上演示图,不知道看到博客的各位有什么可以生成gif的工具,希望能够推荐一下。

因为是修改的别人的代码,他的demo中item数据的意义,我也不是太明白,先上一张图片:


进入程序时,呈现飞入效果。从左向右滑动item时,删除该item。

下面进入代码:

public class ListdemoActivity extends Activity implements OnItemClickListener, OnTouchListener{
	private ArrayList<Map<String, Object>> mData;
	private ListView mListView;
	private MyAdapter mAdapter;
	private Button mDeleteButton,mEditButton;
	float x , y , upx, upy;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.history_record);
		final Calendar c = Calendar.getInstance(); 		 
		int year = c.get(Calendar.YEAR); //获取当前年份 
		int month = c.get(Calendar.MONTH);//获取当前月份 
		int day  = c.get(Calendar.DAY_OF_MONTH);//获取当前月份的日期号码 
		int hour = c.get(Calendar.HOUR_OF_DAY);//获取当前的小时数 
		int minute = c.get(Calendar.MINUTE);//获取当前的分钟数
		String minutes = "";
		if (minute<10) {
			minutes = "0"+minute;
		}
		String time_value = year+":"+month+":"+day+":"+hour+":"+ minutes;

		mData = new ArrayList<Map<String, Object>>();
		for (int i = 0; i < 10; i++) {	
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("image", R.drawable.ic_launcher);
			map.put("maxValue", "最高值:" + i);
			map.put("avgValue", "平均值:" + i);
			map.put("time", time_value);
			map.put("how_time", "持续时间: " + i);
			map.put("last_time", "最后时间:2012-11");
			map.put("isVisible", false);
			mData.add(map);

		}		
		mAdapter = new MyAdapter(this);
		mListView = (ListView)findViewById(R.id.list);
		mListView.setCacheColorHint(Color.TRANSPARENT);	// 设置背景透明度
		mListView.setAdapter(mAdapter);
		mListView.setOnTouchListener(this);
//		mListView.setOnItemClickListener(this);
		mListView.setLayoutAnimation(getListAnim());
		
	}


在onCreate()方法里面,主要是初始化控件和数据。x、y、upx、upy是onTouch时判定位移的参数,以上代码比较简单。

下面就是mListView.setOnTouchListener(this)里面的内容,该activity继承了OnTouchListener接口,下面是它的实现:

@Override
	public boolean onTouch(View v, MotionEvent event) {
		 	
		 if (event.getAction() == MotionEvent.ACTION_DOWN) { 
             x = event.getX(); 
             y = event.getY(); 
         } 
         if (event.getAction() == MotionEvent.ACTION_UP) { 
             upx = event.getX(); 
             upy = event.getY(); 
             int position1 = ((ListView) v).pointToPosition((int) x, (int) y); 
             int position2 = ((ListView) v).pointToPosition((int) upx,(int) upy);             
             if (position1 == position2 && Math.abs(x - upx) > 10) { 
                 View view = ((ListView) v).getChildAt(position1); 
                 removeListItem(view, position1); 
             } 
         } 
		
		return false;
	}

判断是否滑动,如果滑动,调用removeListItem方法:

protected void removeListItem(View rowView, final int positon) {        
        final Animation animation = (Animation) AnimationUtils.loadAnimation(rowView.getContext(), R.anim.item_anim); 
        animation.setAnimationListener(new AnimationListener() { 
            public void onAnimationStart(Animation animation) {} 
            public void onAnimationRepeat(Animation animation) {} 
            public void onAnimationEnd(Animation animation) { 
                mData.remove(positon); 
                mAdapter.notifyDataSetChanged(); 
                animation.cancel(); 
            } 
        }); 
         
        rowView.startAnimation(animation); 
    }

在代码中,我们可以看到在onAnimationEnd()中,是删除了数据。同理,当你想在动画开始时进行一些操作,就可以在回调函数onAnimationStart中进行。另外,方法里使用了动画:

item_anim.xml:

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="800" 
    android:fromXDelta="0" 
    android:fromYDelta="0" 
    android:toXDelta="800" 
    android:toYDelta="0" /> 

下面再看飞入效果,mListView.setLayoutAnimation(getListAnim()):

private LayoutAnimationController getListAnim() {
		AnimationSet set = new AnimationSet(true);
		Animation animation = new AlphaAnimation(0.0f, 1.0f);
		animation.setDuration(300);
		set.addAnimation(animation);

		animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
		Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
		-1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
		animation.setDuration(500);
		set.addAnimation(animation);
		LayoutAnimationController controller = new LayoutAnimationController(
		set, 0.5f);
		return controller;
		}

使用LayoutAnimation实现。

在代码中,屏蔽掉了mListView.setOnItemClickListener(this)这行代码,因为它对onTouch会造成干扰,当然它的方法中是弹出一个Dialog进行删除操作:

@Override
	public void onItemClick(AdapterView<?> parent, View view, final int position,
			long id) {
		new AlertDialog.Builder(ListdemoActivity.this).setTitle("标题")
		.setMessage("提示内容").setPositiveButton("删除",
				new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog,
					int whichButton) {
				mData.remove(position);
				mAdapter.notifyDataSetChanged();
			}
		}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, int which) {
				System.out.println("你好啊");
			}
		}).show();
	}

比较重要,但是又最常见的自定义Adapter:

class ViewHolder {
		public TextView maxValue;
		public Button del_btn;
		public TextView how_time;
		public TextView last_time;
		public TextView  avgValue;
		public ImageView image;
		public boolean isVisible = true;
	}
	
	public class MyAdapter extends BaseAdapter {    
		private Context mContext;
		private MyAdapter(Context context) {
			mContext = context;
		}

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

		public Object getItem(int position) {
			return position;
		}

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

		public View getView(final int position, View convertView, ViewGroup parent) {
			ViewHolder holder = null;
			if(convertView == null) {
				holder = new ViewHolder();
				LayoutInflater inflater = LayoutInflater.from(mContext);
				convertView = inflater.inflate(R.layout.record_info, null);
				holder.del_btn = (Button) convertView.findViewById(R.id.del);
				holder.how_time = (TextView) convertView.findViewById(R.id.how_time);
				holder.last_time = (TextView) convertView.findViewById(R.id.last_time);
				holder.avgValue = (TextView) convertView.findViewById(R.id.avgValue);
				holder.image = (ImageView)convertView.findViewById(R.id.image);
				holder.maxValue = (TextView)convertView.findViewById(R.id.maxValue);
				convertView.setTag(holder);
			} else {
				holder = (ViewHolder)convertView.getTag();
			}
			holder.image.setBackgroundResource((Integer)mData.get(position).get("image"));
			holder.del_btn.setOnClickListener(new View.OnClickListener() {
				public void onClick(View v) {
					mData.remove(position);
					mAdapter.notifyDataSetChanged();  

				}
			});
			holder.how_time.setText((String)(mData.get(position).get("how_time")));           
			holder.last_time.setText((String)(mData.get(position).get("last_time")));          
			holder.avgValue.setText((String)(mData.get(position).get("avgValue")));    		
			holder.maxValue.setText((String)(mData.get(position).get("maxValue")));
			return convertView;
		}

	}

这个相信都写烂了。

最后:代码下载地址:http://download.csdn.net/detail/aomandeshangxiao/4696742

   晚安!


4楼cpzcy昨天 18:38了解了Re: aomandeshangxiao昨天 19:50回复cpzcyn其实 就是主要是动画效果。。。3楼fwj380891124昨天 15:57这标题起的...Re: aomandeshangxiao昨天 18:07回复fwj380891124n哈哈,我是不是有给《环球时报》写稿的潜质。。。2楼li_ruikai昨天 11:26哥哥来看你了,Re: aomandeshangxiao昨天 13:13回复li_ruikain你又不研究android。。。1楼love_android_20113天前 19:06向楼主借些学习这份编程的激情Re: aomandeshangxiao3天前 19:57回复love_android_2011n程序员哪有不熬夜的啊。。。

    
[2] mac上终端出现command not found现象解决
    来源: 互联网  发布时间: 2014-02-18
mac下终端出现command not found现象解决

1 .可能是你的指令输错了。。

2.可能装了ruby等工具造成了命令路径更改。执行以下命令行进行修复默认路径。

a.终端输入cd

b.输入touch .bash_profile

c.输入open -e .bash_profile

d.出现

导入你的默认path     “/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:”不同的PATH 用":"隔开


    
[3] 旧版本Xcode工程在Xcode4.5上真机无法调试有关问题的解决
    来源: 互联网  发布时间: 2014-02-18
旧版本Xcode工程在Xcode4.5下真机无法调试问题的解决

iOS6发布不久后,Xcode4.5也发布了。于是第一时间下载安装,并将之前安装的XCode删除了。后来一直用着没事,近来有个旧项目要修改有些bug,增加对iOS6和iPhone5的支持。做完该做的一切后,打算在真机上测试一下,编译成功但却无法运行。之前在模拟器上调试是一直没出现问题的。弹出的提示如下:


按往常的办法,搜索了一遍,按有些文章说的,将Deployment Target改成最低支持的4.3,之前是3.0的。修改后问题依然。

后来又尝试了好几个方法,还是不能解决。

搞了半天结果还是没有搞定,后来想想,会不会是Architectures支持的问题。项目是支持3.0以上的设备的,所以Architectures是armv6 armv7。尝试将armv6删除,换回默认值,编译运行,这下还真行。shit,搞了半天的东西,原来是这个设置问题。设置如下:


偶尔又发现了一个在Xcode下支持armv6的办法,地址如下:

http://blog.csdn.net/seamanjiang/article/details/8074456


    
最新技术文章:
▪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提高之多方向抽屉实现方法 iis7站长之家
▪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