package com.demo;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Currency;
import java.util.List;
import android.app.Activity;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
/**
* Tab页面手势滑动切换以及动画效果
*
* @author D.Winter
*
*/
public class MainActivity extends Activity {
private ViewPager mPager;// 页卡内容
private List<View> listViews; // Tab页面列表
private ImageView cursor;// 动画图片
private TextView t1, t2, t3;// 页卡头标
private int currIndex = 0;// 当前页卡编号
private int bmpW;// 动画图片宽度
/** 修正值 **/
int offValue = 0;
/** 按钮触发 **/
private boolean byBtn = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
InitImageView();
InitTextView();
InitViewPager();
}
/**
* 初始化头标
*/
private void InitTextView() {
t1 = (TextView) findViewById(R.id.text1);
t2 = (TextView) findViewById(R.id.text2);
t3 = (TextView) findViewById(R.id.text3);
t1.setOnClickListener(new MyOnClickListener(0));
t2.setOnClickListener(new MyOnClickListener(1));
t3.setOnClickListener(new MyOnClickListener(2));
}
/**
* 初始化ViewPager
*/
private void InitViewPager() {
mPager = (ViewPager) findViewById(R.id.vPager);
listViews = new ArrayList<View>();
LayoutInflater mInflater = getLayoutInflater();
listViews.add(mInflater.inflate(R.layout.lay1, null));
listViews.add(mInflater.inflate(R.layout.lay2, null));
listViews.add(mInflater.inflate(R.layout.lay3, null));
mPager.setAdapter(new MyPagerAdapter(listViews));
mPager.setCurrentItem(0);
mPager.setOnPageChangeListener(new MyOnPageChangeListener());
}
/**
* 初始化动画
*/
private void InitImageView() {
cursor = (ImageView) findViewById(R.id.cursor);
bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.a)
.getWidth();// 获取图片宽度
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int screenW = dm.widthPixels;// 获取分辨率宽度
bmpW = screenW / 3;
LayoutParams lp = cursor.getLayoutParams();
lp.width = bmpW;
cursor.setLayoutParams(lp);
// 滑动的修正值
offValue = new BigDecimal(
getResources().getDisplayMetrics().widthPixels / 120.0)
.setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
}
/**
* ViewPager适配器
*/
public class MyPagerAdapter extends PagerAdapter {
public List<View> mListViews;
public MyPagerAdapter(List<View> mListViews) {
this.mListViews = mListViews;
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView(mListViews.get(arg1));
}
@Override
public void finishUpdate(View arg0) {
}
@Override
public int getCount() {
return mListViews.size();
}
@Override
public Object instantiateItem(View arg0, int arg1) {
((ViewPager) arg0).addView(mListViews.get(arg1), 0);
return mListViews.get(arg1);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == (arg1);
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void startUpdate(View arg0) {
}
}
private int clickIndex = 0;
/**
* 头标点击监听
*/
public class MyOnClickListener implements View.OnClickListener {
private int index = 0;
public MyOnClickListener(int i) {
index = i;
}
@Override
public void onClick(View v) {
clickIndex = index;
mPager.setCurrentItem(index);
}
};
/**
* 页卡切换监听
*/
public class MyOnPageChangeListener implements OnPageChangeListener {
// int ci = 0;
@Override
public void onPageSelected(int arg0) {
currIndex = arg0;
}
int _arg2 = 0;
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
if (byBtn) {
//
} else {
if (_arg2 == 0) {
_arg2 = arg2;
} else {
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) cursor
.getLayoutParams();
int moveOffset = 0;
if (arg2 > _arg2) {
moveOffset = arg2 - _arg2 + offValue;
} else {
if (arg2 - _arg2 != -(getResources()
.getDisplayMetrics().widthPixels - 1)) {
moveOffset = arg2 - _arg2 - offValue;
}
}
_arg2 = arg2;
if (Math.abs(clickIndex - currIndex) == 2) {
moveOffset += moveOffset;
}
if (lp.leftMargin + moveOffset / 3 < 0) {
lp.leftMargin = 0;
} else if (lp.leftMargin + moveOffset / 3 > bmpW * 2) {
lp.leftMargin = bmpW * 2;
} else {
lp.leftMargin = lp.leftMargin + moveOffset / 3;
}
cursor.setLayoutParams(lp);
}
}
}
@Override
public void onPageScrollStateChanged(int arg0) {
// 当滚动结束,重新定位一下
if (_arg2 == 0) {
clickIndex=currIndex;
if (currIndex == 0) {
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) cursor
.getLayoutParams();
lp.leftMargin = 0;
cursor.setLayoutParams(lp);
} else if (currIndex == 1) {
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) cursor
.getLayoutParams();
lp.leftMargin = bmpW;
cursor.setLayoutParams(lp);
} else {
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) cursor
.getLayoutParams();
lp.leftMargin = bmpW * 2;
cursor.setLayoutParams(lp);
}
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
在网上用找到一些ViewPager的例子,都很好,但是呢。现在需要做Cursor图片是随着手指的移动而反向移动。这个我是没找到,于是自己加工了一下。 原本一直考虑用View.layout(l,t,r,b);后来发现不行,最后该用了leftMargin。 代码没做什么优化。单单实现功能
资源推荐
资源详情
资源评论
收起资源包目录
.zip (46个子文件)
完成版的修正版
DWinterTabDemo
bin
classes.dex 185KB
res
drawable-ldpi
ic_launcher.png 2KB
drawable-hdpi
a.png 165B
ic_launcher.png 4KB
crunch
drawable-ldpi
ic_launcher.png 2KB
drawable-hdpi
a.png 165B
ic_launcher.png 4KB
drawable-mdpi
ic_launcher.png 2KB
drawable-mdpi
ic_launcher.png 2KB
jarlist.cache 120B
dexedLibs
android-support-v4-5ffc289c16face5d7cba3dc63945fcf1.jar 64KB
classes
com
demo
MainActivity.class 5KB
BuildConfig.class 325B
R$layout.class 448B
R$id.class 508B
R$drawable.class 402B
R$attr.class 310B
MainActivity$MyPagerAdapter.class 2KB
MainActivity$MyOnClickListener.class 976B
R.class 461B
R$string.class 397B
MainActivity$MyOnPageChangeListener.class 3KB
resources.ap_ 13KB
DWinterTabDemo.apk 82KB
AndroidManifest.xml 724B
res
drawable-ldpi
ic_launcher.png 2KB
drawable-hdpi
a.png 3KB
ic_launcher.png 4KB
values
strings.xml 184B
drawable-mdpi
ic_launcher.png 3KB
layout
lay2.xml 290B
lay1.xml 282B
main.xml 2KB
lay3.xml 290B
assets
gen
com
demo
BuildConfig.java 150B
R.java 1KB
proguard.cfg 1KB
.settings
org.eclipse.core.resources.prefs 57B
org.eclipse.jdt.core.prefs 177B
src
com
demo
MainActivity.java 6KB
.project 850B
.classpath 475B
project.properties 361B
AndroidManifest.xml 724B
libs
android-support-v4.jar 137KB
lint.xml 53B
共 46 条
- 1
资源评论
- xpc2542014-11-14有BUG,滑动时有时会跳动,查看代码,写的有点复杂,思路不太清晰,那个滑动的修正值,不知道是什么意思,用来干嘛。后来我根据你这思想,自己重新写了一遍,简单完美实现。在此~~还是表示感谢。已上传修改过的代码http://download.csdn.net/detail/xpc254/8156395
- rainsong2014-10-10ViewPage和webview 结合试试
- qq_251054412015-06-03感谢分享,学到很多
- luych8882015-01-13非常感谢分享,学习中。
- boboxxl2015-07-30解压不了,不知道什么问题。
dearseven
- 粉丝: 9
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功