您好,登錄后才能下訂單哦!
Android 實現(xiàn)局部圖片滑動指引效果
而ViewPager的事件監(jiān)聽器代碼如下:
// 滑動頁面更改事件監(jiān)聽器 private class ImagePageChangeListener implements OnPageChangeListener { @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageSelected(int index) { pageIndex = index; slideLayout.setPageIndex(index); tvSlideTitle.setText(parser.getSlideTitles()[index]); for (int i = 0; i < imageCircleViews.length; i++) { imageCircleViews[index].setBackgroundResource(R.drawable.dot_selected); if (index != i) { imageCircleViews[i].setBackgroundResource(R.drawable.dot_none); } } } }
事件監(jiān)聽器中主要在回調(diào)函數(shù)onPageSelected(int index)中變換標題和圓點圖片。
由于滑動區(qū)域下方的內(nèi)容是不變的,也就是不滑動的,正如在我在上面提到的,內(nèi)容可能會超出屏幕的范圍,所以我們需要使用ScrollView以便內(nèi)容過多的時候顯示滾動條。可能一部分朋友會想到,要顯示滾動條我也知道使用ScrollView。我想在這里說的是,這里即有ViewPager控件,也有ScrollView,如果兩個View單獨使用不會有什么問題。然而不幸的是,兩個一結(jié)合使用就出現(xiàn)了問題。什么問題呢?就是在滑動圖片時出現(xiàn)反彈的現(xiàn)象,就是在滑動時很難滑動,我滑動時感覺很吃力,而且圖片就是滑動不過去,這個就是兩個View之間的沖突,因為兩個View都是滑動的View,都會計算相應(yīng)的位置和判斷相應(yīng)的距離。
我們?nèi)绾蝸斫鉀Q這個沖突呢?這里我們需要重寫ScrollView的onInterceptTouchEvent()回調(diào)函數(shù)。需要在程序里新加一個ScrollViewExtend類并繼承自ScrollView,下面是其代碼:
package com.image.indicator.control; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.ScrollView; /** * 能夠兼容ViewPager的ScrollView * @Description: 解決了ViewPager在ScrollView中的滑動反彈問題 * @File: ViewPagerCompatScrollView.java * @Package com.image.indicator.control * @Author Hanyonglu * @Date 2012-6-18 下午01:34:50 * @Version V1.0 */ public class ScrollViewExtend extends ScrollView { // 滑動距離及坐標 private float xDistance, yDistance, xLast, yLast; public ScrollViewExtend(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: xDistance = yDistance = 0f; xLast = ev.getX(); yLast = ev.getY(); break; case MotionEvent.ACTION_MOVE: final float curX = ev.getX(); final float curY = ev.getY(); xDistance += Math.abs(curX - xLast); yDistance += Math.abs(curY - yLast); xLast = curX; yLast = curY; if(xDistance > yDistance){ return false; } } return super.onInterceptTouchEvent(ev); } }
感謝閱讀,希望能幫助到大家,謝謝大家對 本站的支持!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。