代码之家  ›  专栏  ›  技术社区  ›  burli

Android如何使用Viewpager与OnTouchListener

  •  0
  • burli  · 技术社区  · 9 年前

    我是一个编程初学者,很抱歉我对这个问题的错误解释。

    在MainActivity中,我有一个全屏Viewpager,每次向左或向右滑动时,它都会更改其内容(xml文件)。这些视图集合是在枚举中定义的,我还为此使用了CustomPagerAdapter。 这工作得很好,但当我在MainActivity中实现onTouchListener时,“滑动”就不再工作了。

    有人知道如何解决这个问题吗?

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Main = (View) findViewById(R.id.MainActivity);
        viewPager = (ViewPager) findViewById(R.id.colorgroup);
        viewPager.setAdapter(new CustomPagerAdapter(this));
        View.OnTouchListener handleTouch = new View.OnTouchListener() {
        @Override
         public boolean onTouch(View v, MotionEvent event) {
                int x = (int) event.getX();
                int y = (int) event.getY();
                viewPager.setDrawingCacheEnabled(true);
                viewPager.buildDrawingCache();
                Bitmap bitmap = viewPager.getDrawingCache();
                int pixel = bitmap.getPixel(x, y);
                String hexColor = String.format( "#%02x%02x%02x", r, g, b );
                return true;
            }
        };
        viewPager.setOnTouchListener(handleTouch);
    } 
    

    公共类CustomPagerAdapter扩展了PageRadepter{

    private Context mContext;
    
    public CustomPagerAdapter(Context context) {
        mContext = context;
    }
    
    @Override
    public Object instantiateItem(ViewGroup collection, int position) {
        CustomPagerEnum customPagerEnum = CustomPagerEnum.values()[position];
        LayoutInflater inflater = LayoutInflater.from(mContext);
        ViewGroup layout = (ViewGroup) inflater.inflate(customPagerEnum.getLayoutResId(), collection, false);
        collection.addView(layout);
        return layout;
    }
    
    @Override
    public void destroyItem(ViewGroup collection, int position, Object view) {
        collection.removeView((View) view);
    }
    
    @Override
    public int getCount() {
        return CustomPagerEnum.values().length;
    }
    
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }
    
    @Override
    public CharSequence getPageTitle(int position) {
        CustomPagerEnum customPagerEnum = CustomPagerEnum.values()[position];
        return mContext.getString(customPagerEnum.getTitleResId());
    }
    

    YELLOW(R.string.YELLOW, R.layout.view_yellow),
    PUCE(R.string.PUCE, R.layout.view_puce),
    BROWN(R.string.BROWN, R.layout.view_brown),
    GREEN(R.string.GREEN, R.layout.view_green),
    CYAN(R.string.CYAN, R.layout.view_cyan),
    BLUE(R.string.BLUE, R.layout.view_blue),
    RED(R.string.RED, R.layout.view_red),
    PINK(R.string.PINK, R.layout.view_pink),
    PURPLE(R.string.PURPLE, R.layout.view_purple),
    SLATE(R.string.SLATE, R.layout.view_slate),
    GREY(R.string.GREY, R.layout.view_grey),
    DARK(R.string.DARK, R.layout.view_dark);
    
    
    
        private int mTitleResId;
        private int mLayoutResId;
    
        CustomPagerEnum(int titleResId, int layoutResId) {
            mTitleResId = titleResId;
            mLayoutResId = layoutResId;
        }
    
        public int getTitleResId() {
            return mTitleResId;
        }
    
        public int getLayoutResId() {
            return mLayoutResId;
        }
    

    }

    1 回复  |  直到 9 年前
        1
  •  1
  •   griffinjm    9 年前

    你总是回来 true onTouch() 方法这表示您的处理程序已经使用了触摸事件,因此不会进一步处理该事件。这会导致滑动不起作用。回来 false