频道管理共分为两部分:
一、频道的删除和添加
二、频道的拖动
一、频道的删除和添加
利用监听来进行动画的执行。
动画:以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