GridView简单应用

来源:互联网 发布:网络的好处具体事例 编辑:程序博客网 时间:2024/06/16 18:39


main页面


package com.example.ningac.ningancheng20170920;import android.graphics.Bitmap;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.view.animation.Animation;import android.view.animation.AnimationSet;import android.view.animation.TranslateAnimation;import android.widget.AdapterView;import android.widget.GridView;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import com.example.ningac.ningancheng20170920.view.DragGridView;import com.example.ningac.ningancheng20170920.view.MyGridView;import java.util.ArrayList;import java.util.List;import adapter.Ass;public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {    private com.example.ningac.ningancheng20170920.view.MyGridView mOtherGv;    private com.example.ningac.ningancheng20170920.view.DragGridView mUserGv;    private List<String> mUserList = new ArrayList<>();    private List<String> mOtherList = new ArrayList<>();    private OtherAdapter mOtherAdapter;    private DragAdapter  mUserAdapter;    private boolean ass=true;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();            }    public void initView() {        mUserGv = (DragGridView) findViewById(R.id.userGridView);        mOtherGv = (MyGridView) findViewById(R.id.otherGridView);        mUserList.add("推荐");        mUserList.add("热点");        mUserList.add("上海");        mUserList.add("时尚");        mUserList.add("科技");        mUserList.add("体育");        mUserList.add("军事");        mUserList.add("财经");        mUserList.add("网络");        mOtherList.add("汽车");        mOtherList.add("房产");        mOtherList.add("社会");        mOtherList.add("情感");        mOtherList.add("女人");        mOtherList.add("旅游");        mOtherList.add("健康");        mOtherList.add("美女");        mOtherList.add("游戏");        mOtherList.add("数码");        mOtherList.add("娱乐");        mOtherList.add("探索");        mUserAdapter = new DragAdapter(this, mUserList,true);        mOtherAdapter = new OtherAdapter(this, mOtherList,false);        mUserGv.setAdapter(mUserAdapter);        mOtherGv.setAdapter(mOtherAdapter);        mUserGv.setOnItemClickListener(this);        mOtherGv.setOnItemClickListener(this);    }    /**     *获取点击的Item的对应View,     *因为点击的Item已经有了自己归属的父容器MyGridView,所有我们要是有一个ImageView来代替Item移动     * @param view     * @return     */    private ImageView getView(View view) {        view.destroyDrawingCache();        view.setDrawingCacheEnabled(true);        Bitmap cache = Bitmap.createBitmap(view.getDrawingCache());        view.setDrawingCacheEnabled(false);        ImageView iv = new ImageView(this);        iv.setImageBitmap(cache);        return iv;    }    /**     * 获取移动的VIEW,放入对应ViewGroup布局容器     * @param viewGroup     * @param view     * @param initLocation     * @return     */    private View getMoveView(ViewGroup viewGroup, View view, int[] initLocation) {        int x = initLocation[0];        int y = initLocation[1];        viewGroup.addView(view);        LinearLayout.LayoutParams mLayoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);        mLayoutParams.leftMargin = x;        mLayoutParams.topMargin = y;        view.setLayoutParams(mLayoutParams);        return view;    }    /**     * 创建移动的ITEM对应的ViewGroup布局容器     * 用于存放我们移动的View     */    private ViewGroup getMoveViewGroup() {        //window中最顶层的view        ViewGroup moveViewGroup = (ViewGroup) getWindow().getDecorView();        LinearLayout moveLinearLayout = new LinearLayout(this);        moveLinearLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));        moveViewGroup.addView(moveLinearLayout);        return moveLinearLayout;    }    /**     * 点击ITEM移动动画     *     * @param moveView     * @param startLocation     * @param endLocation     * @param moveChannel     * @param clickGridView     */    private void MoveAnim(View moveView, int[] startLocation, int[] endLocation, final String moveChannel,                          final GridView clickGridView, final boolean isUser) {            int[] initLocation = new int[2];            //获取传递过来的VIEW的坐标            moveView.getLocationInWindow(initLocation);            //得到要移动的VIEW,并放入对应的容器中            final ViewGroup moveViewGroup = getMoveViewGroup();            final View mMoveView = getMoveView(moveViewGroup, moveView, initLocation);            //创建移动动画            TranslateAnimation moveAnimation = new TranslateAnimation(                    startLocation[0], endLocation[0], startLocation[1],                    endLocation[1]);            moveAnimation.setDuration(1000);//动画时间            //动画配置            AnimationSet moveAnimationSet = new AnimationSet(true);            moveAnimationSet.setFillAfter(false);//动画效果执行完毕后,View对象不保留在终止的位置            moveAnimationSet.addAnimation(moveAnimation);            mMoveView.startAnimation(moveAnimationSet);            moveAnimationSet.setAnimationListener(new Animation.AnimationListener() {                @Override                public void onAnimationStart(Animation animation) {                    Log.d("zzz","开始");                    ass=false;                }                @Override                public void onAnimationRepeat(Animation animation) {                }                @Override                public void onAnimationEnd(Animation animation) {                    // 判断点击的是DragGrid还是OtherGridView                    Log.d("zzz","结束");                        moveViewGroup.removeView(mMoveView);                        if (isUser) {                            mOtherAdapter.setVisible(true);                            mOtherAdapter.notifyDataSetChanged();                            mUserAdapter.remove();                        } else {                            mUserAdapter.setVisible(true);                            mUserAdapter.notifyDataSetChanged();                            mOtherAdapter.remove();                        }                    ass=true;                }            });    }    @Override    public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {        if(ass){            switch (parent.getId()) {                case R.id.userGridView:                    Log.d("zzz", "人才1");                    //position为 0,1 的不可以进行任何操作                    if (position != 0 && position != 1) {                        final ImageView moveImageView = getView(view);                        if (moveImageView != null) {                            TextView newTextView = (TextView) view.findViewById(R.id.text_item);                            final int[] startLocation = new int[2];                            newTextView.getLocationInWindow(startLocation);                            final String channel = ((DragAdapter) parent.getAdapter()).getItem(position);//获取点击的频道内容                            mOtherAdapter.setVisible(false);                            //添加到最后一个                            mOtherAdapter.addItem(channel);                            new Handler().postDelayed(new Runnable() {                                public void run() {                                    try {                                        int[] endLocation = new int[2];                                        //获取终点的坐标                                        mOtherGv.getChildAt(mOtherGv.getLastVisiblePosition()).getLocationInWindow(endLocation);                                        MoveAnim(moveImageView, startLocation, endLocation, channel, mUserGv, true);                                        mUserAdapter.setRemove(position);                                    } catch (Exception localException) {                                    }                                }                            }, 50L);                        }                    }                    break;                case R.id.otherGridView:                    Log.d("zzz", "人才2");                    final ImageView moveImageView = getView(view);                    if (moveImageView != null) {                        TextView newTextView = (TextView) view.findViewById(R.id.text_item);                        final int[] startLocation = new int[2];                        newTextView.getLocationInWindow(startLocation);                        final String channel = ((OtherAdapter) parent.getAdapter()).getItem(position);                        mUserAdapter.setVisible(false);                        //添加到最后一个                        mUserAdapter.addItem(channel);                        new Handler().postDelayed(new Runnable() {                            public void run() {                                try {                                    int[] endLocation = new int[2];                                    //获取终点的坐标                                    mUserGv.getChildAt(mUserGv.getLastVisiblePosition()).getLocationInWindow(endLocation);                                    MoveAnim(moveImageView, startLocation, endLocation, channel, mOtherGv,false);                                    mOtherAdapter.setRemove(position);                                } catch (Exception localException) {                                }                            }                        }, 50L);                    }                    break;                default:                    break;            }        }    }}


OtherAdapter页面:
public class OtherAdapter extends BaseAdapter {    private Context context;    public List<String> channelList;    private TextView item_text;    /** 是否可见 在移动动画完毕之前不可见,动画完毕后可见*/    boolean isVisible = true;    /** 要删除的position */    public int remove_position = -1;    /** 是否是用户频道 */    private boolean isUser = false;    public OtherAdapter(Context context, List<String> channelList , boolean isUser) {        this.context = context;        this.channelList = channelList;        this.isUser = isUser;    }    @Override    public int getCount() {        return channelList == null ? 0 : channelList.size();    }    @Override    public String getItem(int position) {        if (channelList != null && channelList.size() != 0) {            return channelList.get(position);        }        return null;    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        View view = LayoutInflater.from(context).inflate(R.layout.adapter_mygridview_item, null);        item_text = (TextView) view.findViewById(R.id.text_item);        String channel = getItem(position);        item_text.setText(channel);        if(isUser){            if ((position == 0) || (position == 1)){                item_text.setEnabled(false);            }        }        if (!isVisible && (position == -1 + channelList.size())){            item_text.setText("");            item_text.setSelected(true);            item_text.setEnabled(true);        }        if(remove_position == position){            item_text.setText("");        }        return view;    }    /** 获取频道列表 */    public List<String> getChannnelLst() {        return channelList;    }    /** 添加频道列表 */    public void addItem(String channel) {        channelList.add(channel);        notifyDataSetChanged();    }    /** 设置删除的position */    public void setRemove(int position) {        remove_position = position;        notifyDataSetChanged();        // notifyDataSetChanged();    }    /** 删除频道列表 */    public void remove() {        channelList.remove(remove_position);        remove_position = -1;        notifyDataSetChanged();    }    /** 设置频道列表 */    public void setListDate(List<String> list) {        channelList = list;    }    /** 获取是否可见 */    public boolean isVisible() {        return isVisible;    }    /** 设置是否可见 */    public void setVisible(boolean visible) {        isVisible = visible;    }}


DragAdapter 页面
public class DragAdapter extends BaseAdapter{    /** TAG*/    private final static String TAG = "DragAdapter";    /** 是否显示底部的ITEM */    private boolean isItemShow = false;    private Context context;    /** 控制的postion */    private int holdPosition;    /** 是否改变 */    private boolean isChanged = false;    /** 列表数据是否改变 */    private boolean isListChanged = false;    /** 是否可见 */    boolean isVisible = true;    /** 可以拖动的列表(即用户选择的频道列表) */    public List<String> channelList;    /** TextView 频道内容 */    private TextView item_text;    /** 要删除的position */    public int remove_position = -1;    /** 是否是用户频道 */    private boolean isUser = false;    public DragAdapter(Context context, List<String> channelList,boolean isUser) {        this.context = context;        this.channelList = channelList;        this.isUser = isUser;    }    @Override    public int getCount() {        // TODO Auto-generated method stub        return channelList == null ? 0 : channelList.size();    }    @Override    public String getItem(int position) {        // TODO Auto-generated method stub        if (channelList != null && channelList.size() != 0) {            return channelList.get(position);        }        return null;    }    @Override    public long getItemId(int position) {        // TODO Auto-generated method stub        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        View view = LayoutInflater.from(context).inflate(R.layout.adapter_mygridview_item, null);        item_text = (TextView) view.findViewById(R.id.text_item);        String channel = getItem(position);        item_text.setText(channel);        if(isUser){            if ((position == 0) || (position == 1)){                item_text.setEnabled(false);            }        }        if (isChanged && (position == holdPosition) && !isItemShow) {            item_text.setText("");            item_text.setSelected(true);            item_text.setEnabled(true);            isChanged = false;        }        if (!isVisible && (position == -1 + channelList.size())) {            item_text.setText("");            item_text.setSelected(true);            item_text.setEnabled(true);        }        if(remove_position == position){            item_text.setText("");        }        return view;    }    /** 添加频道列表 */    public void addItem(String channel) {        channelList.add(channel);        isListChanged = true;        notifyDataSetChanged();    }    /** 拖动变更频道排序 */    public void exchange(int dragPostion, int dropPostion) {        holdPosition = dropPostion;        String dragItem = getItem(dragPostion);        Log.d(TAG, "startPostion=" + dragPostion + ";endPosition=" + dropPostion);        if (dragPostion < dropPostion) {            channelList.add(dropPostion + 1, dragItem);            channelList.remove(dragPostion);        } else {            channelList.add(dropPostion, dragItem);            channelList.remove(dragPostion + 1);        }        isChanged = true;        isListChanged = true;        notifyDataSetChanged();    }    /** 获取频道列表 */    public List<String> getChannnelLst() {        return channelList;    }    /** 设置删除的position */    public void setRemove(int position) {        remove_position = position;        notifyDataSetChanged();    }    /** 删除频道列表 */    public void remove() {        channelList.remove(remove_position);        remove_position = -1;        isListChanged = true;        notifyDataSetChanged();    }    /** 设置频道列表 */    public void setListDate(List<String> list) {        channelList = list;    }    /** 获取是否可见 */    public boolean isVisible() {        return isVisible;    }    /** 排序是否发生改变 */    public boolean isListChanged() {        return isListChanged;    }    /** 设置是否可见 */    public void setVisible(boolean visible) {        isVisible = visible;    }    /** 显示放下的ITEM */    public void setShowDropItem(boolean show) {        isItemShow = show;    }}
layout页面:
<ScrollView        android:layout_width="fill_parent"        android:layout_height="fill_parent"        >        <LinearLayout            android:id="@+id/subscribe_main_layout"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:orientation="vertical"            android:paddingBottom="14.0dip" >            <LinearLayout                android:layout_width="fill_parent"                android:layout_height="wrap_content"                android:layout_marginLeft="10.0dip"                android:layout_marginTop="14.0dip"                android:gravity="bottom"                android:orientation="horizontal" >                <TextView                    android:id="@+id/my_category_tip_text"                    android:layout_width="wrap_content"                    android:layout_height="wrap_content"                    android:textSize="13sp"                    android:text="我的频道"                    />            </LinearLayout>            <View                android:id="@+id/seperate_line"                android:layout_width="match_parent"                android:layout_marginTop="10dp"                android:layout_height="0.5dp"                android:layout_marginBottom="14.0dip"                 />            <com.example.ningac.ningancheng20170920.view.DragGridView                android:id="@+id/userGridView"                android:layout_width="fill_parent"                android:layout_height="wrap_content"                android:layout_marginLeft="14dip"                android:layout_marginRight="14dip"                android:gravity="center"                android:horizontalSpacing="14dip"                android:listSelector="@android:color/transparent"                android:numColumns="4"                android:scrollbars="vertical"                android:stretchMode="columnWidth"                android:verticalSpacing="14.0px" />            <View                android:id="@+id/seperate_line2"                android:layout_marginTop="10dp"                android:layout_width="match_parent"                android:layout_height="0.5dp"                />            <TextView                android:id="@+id/more_category_text"                android:layout_marginBottom="14.0dip"                android:layout_width="wrap_content"                android:layout_marginTop="10dp"                android:layout_height="wrap_content"                android:textSize="13sp"                android:layout_marginLeft="10.0dip"                android:text="更多频道" />            <com.example.ningac.ningancheng20170920.view.MyGridView                android:id="@+id/otherGridView"                android:layout_width="fill_parent"                android:layout_height="wrap_content"                android:layout_marginLeft="14dip"                android:layout_marginRight="14dip"                android:gravity="center"                android:horizontalSpacing="14dip"                android:listSelector="@android:color/transparent"                android:numColumns="4"                android:scrollbars="vertical"                android:stretchMode="columnWidth"                android:verticalSpacing="14.0px" />        </LinearLayout>    </ScrollView>