Android custom control notes

Keywords: Attribute

Three types

1. Inherit existing system control 2. Inherit View 3. Inherit ViewGroup

The biggest difference between view and viewgroup is that viewgroup has children, getChild() method

ObjectAnimator attribute animation

Generally, the height of ViewPager should be specified, otherwise it will not be displayed

The adapter of viewPager is inherited from pager adapter

instantiateItem one more step container.addView(imageView);
class MyPagerAdapter extends PagerAdapter{

        @NonNull
        @Override
        public Object instantiateItem(@NonNull ViewGroup container, int position) {
            ImageView imageView = imageViews.get(position);
            container.addView(imageView);
            return imageView;
        }

        /**
         *
         * @param container  viewpager
         * @param position   Location of release
         * @param object    Released pages
         */
        @Override
        public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
//            super.destroyItem(container, position, object);
            container.removeView((View) object);
        }

        @Override
        public int getCount() {
            return imageViews.size();
        }

        /**
         * Judge whether view and o are the same instance
         * @param view  page
         * @param o
         * @return
         */
        @Override
        public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
//            if(view  == o){
//                return true;
//            }else {
//                return false;
//            }
            return view == o;
        }
    }

There is a method in viewpager to monitor the sliding position and implement OnPageChangeListener

 viewpager.addOnPageChangeListener(new MyOnPageChangeListener());
 class MyOnPageChangeListener implements ViewPager.OnPageChangeListener

The viewPager slides left and right infinitely. Remove the middle value and set its value to infinity.

 //Set middle position
        int item = Integer.MAX_VALUE / 2 - Integer.MAX_VALUE/2%imageViews.size();  //Make sure it's an integral multiple of imageViews
        viewpager.setCurrentItem(item);

@Override
        public int getCount() {
            return Integer.MAX_VALUE;
        }

radioGroup click jump method

 public void scrollToPager(int tempIndex) {
        if ((tempIndex < 0)) {
            tempIndex = 0;
        }
        if (tempIndex > getChildCount() - 1) {
            tempIndex = getChildCount() - 1;
        }
        currentIndex = tempIndex;
        float distanceX = currentIndex * getWidth() - getScrollX();
//        scrollTo(currentIndex * getWidth(),0);
        scrlloer.startScroll(getScrollX(), getScrollY(), (int) distanceX, 0);

        invalidate();  //onDraw() computeScroll() execution
    }

Click event (custom interface)

1. Define the interface. There are changes. Define it there

 /**
     * Interface for monitoring page changes
     */
    public interface OnPagerChangeListener {
        /**
         * Page change callback
         *
         * @param position Current page subscript
         */
        void onScrollToPager(int position);
    }

2. Call method

private OnPagerChangeListener mOnPagerChangeListener;

    /**
     * Set up monitoring of page changes
     *
     * @param l
     */
    public void setOnPagerChangeListener(OnPagerChangeListener l) {
        mOnPagerChangeListener = l;
    }

3. User use

view.setOnClickListener(new View.OnCLickListener()){}

rg_main.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            /**
             *
             * @param radioGroup
             * @param i  0 To 5
             */
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                myviewpager.scrollToPager(i);
            }
        });

4. callbacks

view.setOnClickListener(new View.OnCLickListener()) {/ / click event is executed

}

 //Settings page change
        myviewpager.setOnPagerChangeListener(new MyViewPager.OnPagerChangeListener() {
            /**
             * 0---5
             * @param position Current page subscript
             */
            @Override
            public void onScrollToPager(int position) {
                rg_main.check(position);
            }
        });

scrollTo() is a positive value right to left

It's negative from left to right

invalidate() this method forces the ondraw() computerScroll() method to be drawn

Pop up a layer in the view to realize frame layout and relativeLayout layout

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Posted by madwormer2 on Mon, 06 Jan 2020 18:54:51 -0800