需求:滑动展示页,能够使用本地数据,及获取服务器数据进行刷新操作;

效果图:

实现分析:

1.目录结构:

代码实现:

1.fragment_main.xml

<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"
tools:context="com.jjc.demo.MainActivity$PlaceholderFragment" > <com.jjc.demo.PosterView
android:id="@+id/poster"
android:layout_width="match_parent"
android:layout_height="match_parent" /> </RelativeLayout>

2.view_poster.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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" > <android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" /> <LinearLayout
android:id="@+id/container"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:gravity="center"
android:background="@android:color/transparent"
android:orientation="horizontal" /> </FrameLayout>

3.item_poster.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" > <ImageView
android:id="@+id/image_pic"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop" /> </FrameLayout>

4.poster_point_selector.xml

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true"><bitmap android:src="@drawable/point_normal" />
</item>
<item android:state_enabled="false"><bitmap android:src="@drawable/point_select" />
</item> </selector>

5.PosterView.java

package com.jjc.demo;

import java.util.ArrayList;
import java.util.List; import android.content.Context;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout; public class PosterView extends FrameLayout{ private Context context;
private ViewPager viewPager;
private LinearLayout container; private PosterAdapter adapter; private List<Integer> posterList = new ArrayList<Integer>(); private ImageView imageView;
// 底部小点的图片
private ImageView[] points; // 记录当前选中位置
private int currentIndex = 0;
// private int nextIndex;
private int pageNum = 1; public PosterView(Context context) {
this(context, null);
} public PosterView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
LayoutInflater.from(context).inflate(R.layout.view_poster, this, true);
initView();
} private void initView(){
container = (LinearLayout) findViewById(R.id.container);
viewPager = (ViewPager)findViewById(R.id.viewpager);
viewPager.setOnPageChangeListener(new viewpagerListener()); adapter = new PosterAdapter(context, posterList);
viewPager.setAdapter(adapter);
} /**
* 刷新海报页数据;
* @param list
*/
public void refreshData(List<Integer> list){
if(list == null || list.isEmpty()){
return;
}
initPoint(list.size()); posterList.clear();
posterList.addAll(list);
adapter.notifyDataSetChanged();
} private void initPoint(int num){
pageNum = num;
container.removeAllViews(); if(num == 0){
return;
} points = new ImageView[num];
for (int i = 0; i < num; i++) {
imageView = new ImageView(context);
imageView.setBackgroundResource(R.drawable.poster_point_selector); LinearLayout.LayoutParams mLayoutParams = new LinearLayout.LayoutParams(12, 12);
mLayoutParams.rightMargin = 8;
mLayoutParams.leftMargin = 8;
mLayoutParams.topMargin = 24;
mLayoutParams.bottomMargin = 28; points[i] = imageView;
// 设置位置tag,方便取出与当前位置对应
points[i].setTag(i);
// 默认都设为灰色
points[i].setEnabled(false);
// 给每个小点设置监听
points[i].setOnClickListener(new pointListener());
container.addView(points[i], mLayoutParams);
}
// 设置为白色,即选中状态
points[currentIndex].setEnabled(true);
} private class viewpagerListener implements OnPageChangeListener { @Override
public void onPageScrollStateChanged(int arg0) {
} @Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
} @Override
public void onPageSelected(int position) {
// 设置底部小点选中状态
setCurDot(position);
}
} private class pointListener implements OnClickListener { @Override
public void onClick(View v) {
int position = (Integer) v.getTag();
setCurView(position);
setCurDot(position);
}
} /**
* 设置当前页面的位置
*/
private void setCurView(int position) {
if (position < 0 || position >= pageNum) {
return;
}
viewPager.setCurrentItem(position);
} /**
* 设置当前的小点的位置
*/
private void setCurDot(int positon) {
if (positon < 0 || positon > pageNum - 1 || currentIndex == positon) {
return;
}
points[positon].setEnabled(true);
points[currentIndex].setEnabled(false);
currentIndex = positon;
} }

6.PosterAdapter.java

package com.jjc.demo;

import java.util.List;

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView; public class PosterAdapter extends PagerAdapter { // private Context context;
private List<Integer> posterList; private LayoutInflater inflater; public PosterAdapter(Context context, List<Integer> posterList) {
// this.context = context;
this.posterList = posterList;
inflater = LayoutInflater.from(context);
} @Override
public int getCount() {
return posterList.isEmpty() ? 0 : posterList.size();
} @Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
} @Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
} @Override
public Object instantiateItem(ViewGroup container, int position) { View view = container.findViewById(position);
ViewHolder holder; if(view == null){
holder = new ViewHolder();
view = inflater.inflate(R.layout.item_poster, null);
//为View设置标识符,可通过findViewById方法获取
view.setId(position);
holder.icon = (ImageView)view.findViewById(R.id.image_pic);
container.addView(view);
view.setTag(holder);
}else{
holder = (ViewHolder)view.getTag();
}
holder.icon.setImageResource(posterList.get(position)); return view;
} static class ViewHolder{
ImageView icon;
}
}

7.MainActivity.java

package com.jjc.demo;

import java.util.ArrayList;
import java.util.List; import android.support.v7.app.ActionBarActivity;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; public class MainActivity extends ActionBarActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
} /**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment { private View rootView;
private PosterView posterView; public PlaceholderFragment() {
} @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_main, container, false);
return rootView;
} @Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initView();
} private void initView() {
posterView = (PosterView)rootView.findViewById(R.id.poster); // posterView.setBackgroundResource(R.drawable.poster_02);
List<Integer> images = new ArrayList<Integer>();
images.add(R.drawable.poster_01);
images.add(R.drawable.poster_02);
images.add(R.drawable.poster_03);
images.add(R.drawable.poster_04);
images.add(R.drawable.poster_05);
posterView.refreshData(images); }
} }

代码:http://pan.baidu.com/s/1mgHWqrY

ViewPager 滑动页(一)的更多相关文章

  1. ViewPager 滑动页(四)

    需求:在ViewPager 滑动页(三) 基础上,减少界面层级. 效果图: 图层数变更前: 图层数变更后: 主要代码实现: <?xml version="1.0" encod ...

  2. ViewPager 滑动页(三)

    需求:滑动展示页,能够使用本地数据,及获取服务器数据进行刷新操作,当滑动到最后一页时,结束当前activity,进入下一个activity: 效果图: 实现分析: 1.目录结构: 代码实现: 1.Po ...

  3. ViewPager 滑动页(二)

    需求:滑动展示页,能够使用本地数据,及获取服务器数据进行刷新操作,并实现页面自动切换: 效果图: 实现分析: 1.目录结构: 代码实现: 1.PosterView.java package com.j ...

  4. 【解决ViewPager在大屏上滑动不流畅】 设置ViewPager滑动翻页距离

    在项目中做了一个ViewPager+Fragment滑动翻页的效果,在模拟器和小米手机上测试也比较正常.但是换到4.7以上屏幕测试的时候发现老是滑动失效. 因为系统默认的滑动策略是当用户滑动超过半屏之 ...

  5. (转)ViewPager,ScrollView 嵌套ViewPager滑动冲突解决

    ViewPager,ScrollView 嵌套ViewPager滑动冲突解决 本篇主要讲解一下几个问题 粗略地介绍一下View的事件分发机制 解决事件滑动冲突的思路及方法 ScrollView 里面嵌 ...

  6. ViewPager实现页卡的最新方法--简洁的TabLayout(谷歌支持包)

    效果图: 添加依赖包: compile ‘com.android.support:design:‘ 布局文件: <?xml version="1.0" encoding=&q ...

  7. android开发学习之ViewPager滑动事件讲解

    android ViewPager滑动事件讲解 今天在做项目的时候,由于要处理viewPager页面滑动的事件,所以对其进行了一个小小的研究: 首先ViewPager在处理滑动事件的时候要用到OnPa ...

  8. 如何禁止内部viewPager滑动

    众所周知,viewPager是能够滑动的,但有时候我们需要禁止它的滑动(微笑地面对*----*). 情况是这样的: activity中有一个viewPager,viewPager中加入3个Fragme ...

  9. ViewPager实现页卡的3种方法(谷歌组件)

    ----方法一:---- 效果图: 须要的组件: ViewPager+PagerTabStrip 布局文件代码: <!--xmlns:android_custom="http://sc ...

随机推荐

  1. php使用注意点

    php使用时间之前要将php.ini中时区设置好,否则会报警告.截图如下:“;date.timezone =”设置为“date.timezone =Asia/Shanghai”即可. apache如果 ...

  2. 拉链法解决Hash节点冲突问题

    <?php /* * hash::拉链法解决hash节点存储冲突问题 * ::2014-07-02 * ::Small_Kind */ class small_hash { private $s ...

  3. Get the item a SharePoint workflow task is associated with

    This is handy. SharePoint helpfully populates the meta data with the GUID of the list and the ID of  ...

  4. bnuoj 27874 "Center" of [p]erimeter midpoints(计算几何)

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=27874 [题意]: 给你一个三角形三个顶点的坐标ABC,三角形各边取一点DEF,将三角形周长平均分割 ...

  5. Csharp volatile 关键字

    volatile 关键字指示一个字段可以由多个同时执行的线程修改.声明为 volatile 的字段不受编译器优化(假定由单个线程访问)的限制.这样可以确保该字段在任何时间呈现的都是最新的值. vola ...

  6. itext 落雨 out of membery Memory Optimization

    Memory Optimization If a document deals with a lot of data or large elements, such as images, it is ...

  7. ASP + ACCESS 上传图片到数据库与将图片读出数据库显示之实现

    1.uppic.asp:上传图片程序 <% dim rs dim formsize,formdata,bncrlf,divider,datastart,dataend,mydata formsi ...

  8. Unity3D开发之NGUI结合粒子系统的遮挡问题

    原地址:http://blog.csdn.net/lihandsome/article/details/22194025 我的是NGUI3.0.3版本,在加入粒子系统的时候发现一直都是在精灵的下面,所 ...

  9. fiddler插件开发step by step 1

    Fiddler 是优秀的抓包工具,有着众多的优秀插件.Fiddler 软件是由C#语言开发的,运行在.net Framework 框架之上,所以我们也可以使用vs来开发自己的Fiddler插件,下面就 ...

  10. WIN7+Ubuntu双系统,win7启动不了

    在网上搜索了下,大多说的是因为重装引起的坏道, 我经过半天的搜索才找到了问题所在,首先看看下面连接的二楼大神给出的解决方案: https://forum.ubuntu.org.cn/viewtopic ...