天猫、淘宝、京东商品详情的图片手动滑动ViewPager

来源:互联网 发布:网络广告位租 编辑:程序博客网 时间:2024/05/16 01:46

我测试了 粘贴复制修改图片及id就能运行,已经上传dome下边

http://download.csdn.net/detail/jingde_qin/9694357  网址

在布局文件中定义ViewPager

相应的XML文件——需要注意的是布局文件中的ViewPager需要书写完整路径

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/rl_root"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <!-- 滑动的页面 -->    <android.support.v4.view.ViewPager        android:id="@+id/guide_pager"        android:layout_width="match_parent"        android:layout_height="match_parent" >    </android.support.v4.view.ViewPager>    <!-- 装点的容器 -->    <RelativeLayout        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_centerHorizontal="true"        android:layout_marginBottom="25dp" >        <LinearLayout            android:id="@+id/gudie_point_container"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:orientation="horizontal" >        </LinearLayout>        <!-- 画选中的点 -->        <View            android:id="@+id/guide_point_selected"            android:layout_width="10dp"            android:layout_height="10dp"            android:background="@drawable/point_seleted" />    </RelativeLayout></RelativeLayout>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

相关的drawable文件

point_seleted文件 
shape=”oval”绘画出圆形图案 
corners Android:radius=”5dp”设置圆角大小(圆角可以设置也可以不设置,并不影响) 
solid android:color=”#ff0000”图案的填充颜色

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="oval" >    <corners android:radius="5dp" />    <solid android:color="#ff0000" /></shape>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

point_normal文件

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="oval" >    <corners android:radius="5dp"/>    <solid android:color="@android:color/darker_gray" /></shape>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在activity中动态设置布局文件的高度以及添加控件到布局文件中

package com.sjxz.demo;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.View;import android.view.ViewGroup;import android.view.ViewTreeObserver;import android.widget.FrameLayout;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;import java.util.ArrayList;import java.util.List;public class MainActivity extends Activity implements ViewPager.OnPageChangeListener {    private ViewPager mPager;    private LinearLayout mPointContainer;    private RelativeLayout rl_root;    private View mSeletedPoint;    private int             mPointSpace;    private List<ImageView> mImgDatas;    //在studio中引用图片是通过 R.mipmap.guide_1    //在eclipse中是通过R.drawable.guide_1    private int[]           imgRes  = new int[] {            R.mipmap.guide_1,            R.mipmap.guide_2,            R.mipmap.guide_3    };    private int screenHeight;    private int screenWidth;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //获取屏幕的高度        screenHeight=getScreenHeight(MainActivity.this)/2;        screenWidth=getScreenWidth(MainActivity.this);        setContentView(R.layout.activity_main);        initView();        initData();    }    private void initView() {        mPager = (ViewPager) findViewById(R.id.guide_pager);        mPointContainer = (LinearLayout) findViewById(R.id.gudie_point_container);        mSeletedPoint = findViewById(R.id.guide_point_selected);        rl_root=(RelativeLayout)findViewById(R.id.rl_root);        rl_root.setLayoutParams(new FrameLayout.LayoutParams(screenWidth,screenHeight));        // 添加全局布局的监听        mSeletedPoint.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {            @Override            public void onGlobalLayout() {                // 获得两个点间的距离(实时监听全局,只要出现两个之后就获取距离并移除监听)                mPointSpace = mPointContainer.getChildAt(1).getLeft() - mPointContainer.getChildAt(0).getLeft();                mSeletedPoint.getViewTreeObserver().removeGlobalOnLayoutListener(this);            }        });    }    private void initData() {        // 对数据进行初始化        mImgDatas = new ArrayList<ImageView>();        for (int i = 0; i < imgRes.length; i++)        {            ImageView iv = new ImageView(this);            iv.setImageResource(imgRes[i]);            iv.setScaleType(ImageView.ScaleType.FIT_XY);            // add            mImgDatas.add(iv);            // 动态的添加点            View view = new View(this);            view.setBackgroundResource(R.drawable.point_normal);            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(dip2px(MainActivity.this,10), dip2px(MainActivity.this,10));            if (i != 0)            {                params.leftMargin = 10;            }            mPointContainer.addView(view, params);        }        // 给viewpager添加数据        mPager.setAdapter(new GuidePagerAdapter());// --->List        // 设置viewpager的监听        mPager.setOnPageChangeListener(this);    }    //对ViewPager进行数据适配    class GuidePagerAdapter extends PagerAdapter    {        @Override        public int getCount()        {            if (mImgDatas != null) { return mImgDatas.size(); }            return 0;        }        @Override        public boolean isViewFromObject(View view, Object object)        {            return view == object;        }        @Override        public Object instantiateItem(ViewGroup container, int position)        {            // 获得imageView            ImageView iv = mImgDatas.get(position);            // 用pager添加            // mPager.addView(iv);            container.addView(iv);            return iv;        }        @Override        public void destroyItem(ViewGroup container, int position, Object object)        {            //加载当前页面的左右两侧数据,其他的都会实时消除            container.removeView((View) object);        }    }    @Override    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {// 滚动时        // @positionOffset :        // @positionOffsetPixels: 滚动的像素        // 1. 计算需要移动距离        // 通过两个点间的距离计算 和 positionOffset,移动的距离        //positionOffset的值是[0-1]移动的百分比        int left = (int) (mPointSpace * positionOffset + 0.5f);        // 2. 改变选中点的marginleft        RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) mSeletedPoint.getLayoutParams();        params.leftMargin = left + mPointSpace * position;        mSeletedPoint.setLayoutParams(params);    }    @Override    public void onPageSelected(int position) {    }    @Override    public void onPageScrollStateChanged(int state) {    }    //可以将一下方法封装到一个Utils工具类中    /**     * 把(Xml中)dp转换为像素px展现     */    public static int dip2px(Context context, float px) {        final float scale = getScreenDensity(context);        return (int) (px * scale + 0.5);    }    /**     * 得到设备的(Xml中)dp     */    public static float getScreenDensity(Context context) {        return context.getResources().getDisplayMetrics().density;    }    /**     * 得到设备屏幕的宽度     */    public static int getScreenWidth(Context context) {        return context.getResources().getDisplayMetrics().widthPixels;    }    /**     * 得到设备屏幕的高度     */    public static int getScreenHeight(Context context) {        return context.getResources().getDisplayMetrics().heightPixels;    }}
0 0
原创粉丝点击