===========================================================================================================

HorizontalListView.java


public class HorizontalListView extends LinearLayout {


    protected Context mContext;

    protected HorizontalScrollView mScrollView=null;

    protected LinearLayout mListLayout=null;

    protected int mSelectedPostion=0;


    public HorizontalListView(Context context) {

        super(context);

        mContext = context;

        initLayout();

    }


    public HorizontalListView(Context context, AttributeSet attrs) {

        super(context, attrs);

        mContext = context;

        initLayout();

    }


    public HorizontalListView(Context context, AttributeSet attrs, int defStyle) {

        super(context, attrs, defStyle);

        mContext = context;

        initLayout();

    }

    private void initLayout(){

        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View layout = inflater.inflate(R.layout.horizontal_listview, null);

        mScrollView = (HorizontalScrollView)layout.findViewById(R.id.horizontal_scrollview);

        mListLayout=(LinearLayout)layout.findViewById(R.id.horizontal_listview);

        super.addView(layout);

    }

    public void addView(View child){

        mListLayout.addView(child);

    }

    public void removeView(View child){

        mListLayout.removeView(child);

    }

    public void clear(){

        mListLayout.removeAllViews();

    }

    @Override

    protected void onLayout(boolean changed, int l, int t, int r, int b) {

        super.onLayout(changed, l, t, r, b);

        if(mSelectedPostion > 0 && mSelectedPostion < mListLayout.getChildCount()){

            View v = mListLayout.getChildAt(mSelectedPostion);

            if(v == null){

                return;

            }


            mScrollView.computeScroll();

            int scrollWidth = mScrollView.getWidth();

            int layoutRight = mListLayout.getRight();

            int viewLeft = v.getLeft();

            final int scrollX;


            if(viewLeft+scrollWidth < layoutRight){

                scrollX = viewLeft;

            }else{

                scrollX = layoutRight - scrollWidth;

            }


            mScrollView.post(new Runnable() {

                @Override

                public void run() {

                    mScrollView.scrollTo(scrollX, mScrollView.getScrollY());

                }

            });


        }

    }


    public void setSelection(int position){

        if(position>=0 && position < mListLayout.getChildCount()){

            mSelectedPostion = position;

        }

    }

}

===========================================================================================================

layout/horizontal_listview.xml


<?xml version="1.0" encoding="utf-8"?>

<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/horizontal_scrollview"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:scrollbars="none">"


    <LinearLayout

        android:id="@+id/horizontal_listview"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"/>


</HorizontalScrollView>



'programmer > android' 카테고리의 다른 글

Dialog softkeyboard  (0) 2013.06.10
apache 압축 라이브러리를 이용한 압축 클래스  (0) 2013.05.29
onTouch와 onTouchEvent  (0) 2013.02.18
PendingIntent  (1) 2012.12.14
Toast 팝업  (0) 2012.12.13

+ Recent posts