2016-01-08 2 views
1

У меня есть ViewPager, где я переопределяю onPageScrolled, чтобы получить сумму прокрутки пользователя. Затем мне нужно перевернуть представление в соответствии с positionOffset, полученным из метода прокрутки. Я хочу добиться чего-то подобного. Перевернув все виды рядом с выбранным.Skew/Flip Layout в ViewPager

enter image description here

В onDraw методе мои PageLayout «ы у меня есть следующий код пытается исказить холст в соответствии со смещением получил.

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    Matrix matrix = canvas.getMatrix(); 
    camera.save(); 
    camera.rotateX(skew); 
    camera.getMatrix(matrix); 
    camera.restore(); 
    canvas.concat(matrix); 
} 

Похоже, что это только смазало слева:

enter image description here

Как я могу достичь того же эффекта справа? Было бы хорошо, если бы оно не только исказило его, но и изменило высоту, так что иллюзия слегка изменилась.

+0

Похоже на это: http://stackoverflow.com/questions/5354183/skewing-a-bitmap-only-in-the-vertical-direction? –

+0

Спасибо! Я понял это с помощью вашей ссылки. Оказывается, мне нужна была другая перспектива просмотра, чтобы заставить ее работать. – nilsi

+0

@nilsi можете ли вы предоставить какой-либо рабочий образец? – Rahil2952

ответ

0

Изменение перспективы просмотра, как это заставило его работать.

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    Matrix matrix = canvas.getMatrix(); 
    camera.save(); 
    camera.rotateX(-skew); 
    camera.rotateY(0); 
    camera.rotateZ(0); 
    camera.getMatrix(matrix); 

    int centerX = canvas.getWidth()/2; 
    int centerY = canvas.getHeight()/2; 
    matrix.preTranslate(-centerX, -centerY); //This is the key to getting the correct viewing perspective 
    matrix.postTranslate(centerX, centerY); 

    camera.restore(); 
    canvas.concat(matrix); 
}