知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
AndroidViewPager導航
發(fā)表時間:2020-10-19
發(fā)布人:葵宇科技
瀏覽次數(shù):46
ViewPager做導航想不想有如許的效不雅:
比如說有四┞放圖片,下面有四個圓點,當頁面滑動的時刻一個點變年腋荷瑣點變?。ɑ蛘呤且粋€點變小一個點變大年夜),等于說同時在履行兩個動畫。
[img]http://img.blog.csdn.net/20150104151142094?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU291bE9mQW5kcm9pZA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
package com.example.day_2014_10_17_viewpager; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.widget.ImageView; import com.nineoldandroids.view.ViewHelper; import com.panpass.adapter.MyViewPagerAdapter; import com.panpass.view.MyViewPager; import com.panpass.view.MyViewPager.DiyPageScrollListener; public class MainActivity extends Activity { private Context mContext = this; private MyViewPager mViewPager; private ImageView imageView1, imageView2, imageView3, imageView4; private ArrayList<ImageView> mList; private HashMap<Integer, ImageView> mHashMap = new LinkedHashMap<Integer, ImageView>(); private static final float SCALE_MAX = 0.55f; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mList = new ArrayList<ImageView>(); ImageView img = new ImageView(mContext); img.setBackgroundResource(R.drawable.guide_page1); mList.add(img); img = new ImageView(mContext); img.setBackgroundResource(R.drawable.guide_page2); mList.add(img); img = new ImageView(mContext); img.setBackgroundResource(R.drawable.guide_page3); mList.add(img); img = new ImageView(mContext); img.setBackgroundResource(R.drawable.guide_page4); mList.add(img); mViewPager = (MyViewPager) findViewById(R.id.view_pager); mViewPager.setAdapter(new MyViewPagerAdapter(mList)); imageView1 = (ImageView) findViewById(R.id.imageView1); imageView2 = (ImageView) findViewById(R.id.imageView2); imageView3 = (ImageView) findViewById(R.id.imageView3); imageView4 = (ImageView) findViewById(R.id.imageView4); ViewHelper.setScaleX(imageView2, SCALE_MAX); ViewHelper.setScaleY(imageView2, SCALE_MAX); ViewHelper.setScaleX(imageView3, SCALE_MAX); ViewHelper.setScaleY(imageView3, SCALE_MAX); ViewHelper.setScaleX(imageView4, SCALE_MAX); ViewHelper.setScaleY(imageView4, SCALE_MAX); mHashMap.put(0, imageView1); mHashMap.put(1, imageView2); mHashMap.put(2, imageView3); mHashMap.put(3, imageView4); mViewPager.setDiyOnPageScrollListener(new DiyPageScrollListener() { @Override public void diyOnPageScrollListener(int position, float positionOffset, int positionOffsetPixels, boolean left, boolean right) { // 獲取左邊的View ImageView mLeftImg = mHashMap.get(position); // 獲取右邊的View ImageView mRightImg = mHashMap.get(position + 1); // 斷定滑動的偏向 float mScaleRight; float mScaleLeft; /** * 留意事宜: 1 留意你要很靈敏的斷定ViewPager的切換偏向是很難的,對于請求很高的應用來說是做不到了。 2 * 不管是向左滑動照樣向右滑動,他們有的都是同一種算法 */ if (mRightImg != null) { /** * 縮小比例 如不雅手指大年夜右到左的滑動(切換到后一個):0.0~1.0,即大年夜一半到最大年夜 * 如不雅手指大年夜左到右的滑動(切換到前一個):1.0~0,即大年夜最大年夜到一半 */ mScaleRight = (1-SCALE_MAX) * positionOffset + SCALE_MAX; /** * x偏移量: 如不雅手指大年夜右到左的滑動(切換到后一個):0-720 如不雅手指大年夜左到右的滑動(切換到前一個):720-0 */ ViewHelper.setScaleX(mRightImg, mScaleRight); ViewHelper.setScaleY(mRightImg, mScaleRight); } if (mLeftImg != null) { mScaleLeft = (1-SCALE_MAX) * (1 - positionOffset) + SCALE_MAX; /** * x偏移量: 如不雅手指大年夜右到左的滑動(切換到后一個):0-720 如不雅手指大年夜左到右的滑動(切換到前一個):720-0 */ ViewHelper.setScaleX(mLeftImg, mScaleLeft); ViewHelper.setScaleY(mLeftImg, mScaleLeft); } } }); } }
package com.panpass.adapter; import java.util.ArrayList; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; public class MyViewPagerAdapter extends PagerAdapter { private ArrayList<ImageView> imgList; public MyViewPagerAdapter(ArrayList<ImageView> imgList) { super(); this.imgList = imgList; } @Override public int getCount() { return imgList.size(); } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView img = imgList.get(position); container.addView(img); return img; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((ImageView)object); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == (View)arg1; } }
package com.panpass.view; import android.content.Context; import android.support.v4.view.ViewPager; import android.util.AttributeSet; public class MyViewPager extends ViewPager { private boolean left = false; private boolean right = false; private boolean isScrolling = false; private int lastValue = http://www.sjsjw.com/100/000297MYM009910/-1; private ChangeViewCallback changeViewCallback = null; public MyViewPager(Context context, AttributeSet attrs) { super(context, attrs); init(); } public MyViewPager(Context context) { super(context); init(); } private DiyPageScrollListener listener1; public interface DiyPageScrollListener{ void diyOnPageScrollListener(int position, float positionOffset, int positionOffsetPixels,boolean left,boolean right); } public void setDiyOnPageScrollListener(DiyPageScrollListener listener){ this.listener1 = listener; } @Override protected void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { listener1.diyOnPageScrollListener(position, positionOffset, positionOffsetPixels,left,right); super.onPageScrolled(position, positionOffset, positionOffsetPixels); } /** * init method . */ private void init() { // setOnPageChangeListener(listener); } /** * listener ,to get move direction . */ public OnPageChangeListener listener = new OnPageChangeListener() { @Override public void onPageScrollStateChanged(int arg0) { if (arg0 == 1) { isScrolling = true; } else { isScrolling = false; } if (arg0 == 2) { if(changeViewCallback!=null){ changeViewCallback.changeView(left, right); } right = left = false; } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { if (isScrolling) { if (lastValue > arg2) { // 遞減,向右側(cè)滑動 right = true; left = false; } else if (lastValue < arg2) { // 遞減,向右側(cè)滑動 right = false; left = true; } else if (lastValue == arg2) { right = left = false; } } lastValue = arg2; } @Override public void onPageSelected(int arg0) { if(changeViewCallback!=null){ changeViewCallback.getCurrentPageIndex(arg0); } } }; /** * 獲得是否向右側(cè)滑動 * @return true 為右滑動 */ public boolean getMoveRight(){ return right; } /** * 獲得是否向左側(cè)滑動 * @return true 為左做滑動 */ public boolean getMoveLeft(){ return left; } /** * 滑動狀況改變回調(diào) * @author zxy * */ public interface ChangeViewCallback{ public void changeView(boolean left,boolean right); public void getCurrentPageIndex(int index); } public void setChangeViewCallback(ChangeViewCallback callback){ changeViewCallback = callback; } }
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <com.panpass.view.MyViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="50dp" android:gravity="center" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src=http://www.sjsjw.com/100/000297MYM009910/"@drawable/banner_circle_big" />
相關(guān)案例查看更多
相關(guān)閱讀
- 云南小程序開發(fā)報價
- 云南網(wǎng)站建設
- 網(wǎng)絡公司聯(lián)系方式
- 網(wǎng)站建設服務公司
- 表單
- 微信分銷系統(tǒng)
- 網(wǎng)站建設列表網(wǎng)
- 區(qū)塊鏈
- 昆明做網(wǎng)站
- 支付寶小程序被騙
- 百度推廣
- 云南網(wǎng)站建設公司排名
- painter
- 汽車報廢軟件
- 制作一個小程序
- 云南小程序開發(fā)公司推薦
- 昆明小程序公司
- 網(wǎng)站開發(fā)哪家好
- 云南網(wǎng)絡推廣
- 文山小程序開發(fā)
- 微信分銷
- 云南小程序定制
- 汽車報廢拆解管理系統(tǒng)
- 云南網(wǎng)站維護
- 網(wǎng)站建設
- 網(wǎng)站建設公司地址
- 云南網(wǎng)站建設首頁
- 網(wǎng)站開發(fā)公司哪家好
- 昆明網(wǎng)絡公司
- 花農(nóng)小程序