ViewPager protege a animação de rolagem ao deslizar para a esquerda e para a direita e alternar

Geralmente usamos uma combinação semelhante de ViewPager+Fragment+TabLayout.

Depois, há várias demandas.

Às vezes, é necessário que o viewpager não deslize para a esquerda e para a direita, mas a animação de rolagem ao alternar é mantida.
Às vezes, é necessário que o viewpager não deslize para a esquerda e para a direita e a animação de rolagem não apareça ao alternar.

[Solução]
Para atingir os requisitos acima, precisamos reescrever o ViewPager.

Para proibir o ViewPager de deslizar para a esquerda e para a direita:
Substitua o método onInterceptTouchEvent(MotionEvent arg0)
e o método onTouchEvent(MotionEvent arg0) do ViewPager.
Os valores de retorno desses dois métodos são ambos tipos booleanos. Você só precisa alterar o valor de retorno para false
para esse ViewPager não será consumido O evento de deslizamento do dedo é passado para a View superior para processamento ou o evento é encerrado diretamente.

Para animação de troca de viewpager estático:
você precisa reescrever o método setCurrentItem() de viewpager

A classe NoScrollViewPager personalizada é a seguinte, que pode ser copiada e colada diretamente para uso.

/** 
 * Usado para proteger o viewpager de deslizar para a esquerda e para a direita e rolar a animação ao alternar 
 * Proibir o ViewPager de deslizar para a esquerda e para a direita: 
 * ViewPager precisa ser reescrito para substituir o método onInterceptTouchEvent(MotionEvent arg0) do ViewPager 
 * e o método onTouchEvent(MotionEvent arg0) 
 * esses dois O valor de retorno do método é do tipo booleano, você só precisa alterar o valor de retorno para false 
 * para que o ViewPager não consuma o evento de deslizamento do dedo e passe para o View superior para processamento ou o evento será encerrado diretamente. 
 * 
 * Animação estática de troca de viewpager: 
 * Você precisa reescrever o método setCurrentItem() do viewpager 
 */ 
public class NoScrollViewPager extends ViewPager { 

    private boolean isCanScroll = true; 
    private boolean isHasScrollAnim=true; 

    public NoScrollViewPager(Context context) { 
        super( context); 
    } 
 
    public NoScrollViewPager(contexto de contexto, AttributeSet attrs) {
        super(contexto, atributos); 
    } 

    /** 
     * Define se pode deslizar 
     * @param isCanScroll false proíbe deslizamento, true permite deslizamento 
     */ 
    public void setCanScroll(boolean isCanScroll) { 
        this.isCanScroll = isCanScroll; 
    } 

    /** 
     * Define se deseja remover efeito deslizante 
     * @param isHasScrollAnim false para remover o efeito de rolagem, true para não removê-lo 
     */ 
    public void setHasScrollAnim(boolean isHasScrollAnim){ 
        this.isHasScrollAnim=isHasScrollAnim; 
    } 


    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
        return isCanScroll & & super .onInterceptTouchEvent(ev); 
    } 

    @Override 
    public boolean onTouchEvent( MotionEvent ev) {
        return isCanScroll && super.onTouchEvent(ev); 
    } 

    @Override 
    public void setCurrentItem(int item, boolean smoothScroll) { 
        super.setCurrentItem(item, smoothScroll); 
    } 

    /** 
     * Define se deseja buscar a animação de rolagem ao alternar 
     *isHasScrollAnim Quando falso , o efeito de rolagem será removido 
     */ 
    @Override 
    public void setCurrentItem(int item) { 
        super.setCurrentItem(item,isHasScrollAnim); 
    } 

}

Entre eles, setHasScrollAnim(boolean isHasScrollAnim) é usado para definir se o efeito deslizante deve ser removido,

setCanScroll(boolean isCanScroll) é usado para definir se deve deslizar

Acho que você gosta

Origin blog.csdn.net/s_nshine/article/details/130845669
Recomendado
Clasificación