今日头条 频道管理(删除、添加、拖动)

本文介绍了如何进行今日头条频道的管理,包括删除、添加和拖动操作。在频道删除和添加中,使用了监听来执行动画,通过TranslateAnimation实现频道移动效果。在拖动频道时,首先创建移动窗口,利用WindowManager和LayoutParams,接着通过监听Animation来完成拖动操作。
摘要由CSDN通过智能技术生成

频道管理共分为两部分:


一、频道的删除和添加
二、频道的拖动


一、频道的删除和添加


利用监听来进行动画的执行。
动画:以item本身创建Bitmap, 然后放入顶层ViewGroup 执行动画并监听Animation(动画为TranslateAnimation 移动)


代码:


public class MyActivity extends Activity{
	
	private DragGrid userGridView;
	private OtherGridView otherGridView;
	private DragGridAdapter adapter;
	private ArrayList<String> data1 = null;
	private ArrayList<String> data2 = null;
	private OtherAdapter otherAdapter;
	//1、防止报java.lang.ArrayIndexOutOfBoundsException 异常,用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引
	//主要是当连续点击那个还没有移除item的时候, adapter.remove回报这个错
	private boolean isMove = false;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		initView();
		initListener();
	}
	
	private void initView(){
		userGridView = (DragGrid)findViewById(R.id.userGridView);
		otherGridView = (OtherGridView) findViewById(R.id.otherGridView);
		data1 = new ArrayList<String>();
		data2 = new ArrayList<String>();
		String[] s = new String[]{"如果当时", "多余的解释", "有何不可", "坏孩子", "清明雨上", "城府", "认错", "内线", "星座书上"};
		for(int i = 0;i < s.length;i ++){
			data1.add(s[i]);
		}
		String[] ss = new String[]{"等到烟火清凉", "山水之间", "七夕", "有桃花", "惊鸿一面", "隐隐约约", "宇宙之大", "梧桐灯", "弹指一挥间",
				"胡萝卜须", "幻听", "对话老师", "伴虎", "闺蜜", "装糊涂", "play with style", "心疼你的过去", "全球变冷", "亲情式的爱情"};
		for(int i = 0;i < ss.length;i ++){
			data2.add(ss[i]);
		}
		adapter = new DragGridAdapter(this, data1);
		otherAdapter = new OtherAdapter(this, data2);
		userGridView.setAdapter(adapter);
		otherGridView.setAdapter(otherAdapter);
	}
	
	
	private void initListener(){
		userGridView.setOnItemClickListener(new OnItemClickListener() {
			
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					final int position, long id) {
				// TODO Auto-generated method stub
				if(isMove){
					return;
				}
				
				if(position > 1){
					final ImageView moveImage = getView(view);
					if(moveImage != null){
						TextView nowTextView = (TextView) view.findViewById(R.id.text_item);
						final int[] startCoord = new int[2];
						//getLocationInWindow:获取在整个窗口内的绝对坐标
						//将view的左上角坐标存入数组中.此坐标是相对当前activity而言.
						nowTextView.getLocationInWindow(startCoord);
						//setVisible():显示动画要移动的位置 
						otherAdapter.setVisible(false);
						otherAdapter.add(data1.get(position));
						//postDelayed():延时50L之后执行
						new Handler().postDelayed(new Runnable(){
							@Override
							public void run() {
								// TODO Auto-generated method stub
							    int[] endCoord = new int[2];
								otherGridView.getChildAt(otherGridView.getLastVisiblePosition()).getLocationInWindow(endCoord);
								adapter.setRemove(position);
								moveAnim(moveImage, startCoord, endCoord, userGridView);
							}
						}, 50L);
					}
				}
			}
		});
		
		otherGridView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					final int position, long id) {
				// TODO Auto-generated method stub
				if (isMove) {
					return;
				}

				if (position > 1) {
					final ImageView moveImage = getView(view);
					if (moveImage != null) {
						TextView nowTextView = (TextView) view
								.findViewById(R.id.text_item);
						final int[] startCoord = new int[2];
						nowTextView.getLocationInWindow(startCoord);
						adapter.setVisible(false);
						adapter.add(data2.get(position));
						new Handler().postDelayed(new
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值