现在Android开发门槛太低了,网络上一大堆第三方库。比如:viewpager指示器、图片加载框架Picasso、网络框架okhttp。有时候我不禁在想:没有这些第三方,我该怎么办,我还会不会开发!所以本系列博客的意义在于拨开第三方库的层层迷雾,知其然,进而知其所以然(先装个那啥。。)。其实我也是个菜鸟,只是记录下自己的想法而已。
- 图片框架Picasso
- viewpager的指示器indicator
- fragment的懒加载模式
废话不多说了,先上图。
本Demo包含一下内容:
- viewpager的指示器的原理,以及动态改变字体大小、颜色、指示器的样式
- fragment的懒加载模式和viewpager设置缓存页面方法的配合,保证滑到哪里加哪里
- 富文本解析html格式的String字符串达到webview的效果
indicator原理
指示器的作用就是指示当前viewpager是哪一个页面。
第一:也就是说我滑到登录页就指向登录,我滑到注册页面就指向注册,与此就可以很自然的联想到viewpager必然有滑动监听事件了。
第二:当我点击登录页button的时候,页面应该跳到登录页;注册也亦然了。
代码如下所示:
package com.xiaokun.xiusou.demo6;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import com.xiaokun.xiusou.demo6.Adapter.FragmentAdapter;
import com.xiaokun.xiusou.demo6.Fragment.TestFragment;
import com.yuyh.library.utils.log.LogUtils;
import java.util.ArrayList;
import java.util.List;
import butterknife.ButterKnife;
import butterknife.InjectView;
/**
* Created by xiaocai on 2016/11/18 0018.
*/
public class PassWordActivity extends AppCompatActivity {
@InjectView(R.id.group)
RadioGroup group;
@InjectView(R.id.login)
RadioButton login;
@InjectView(R.id.register)
RadioButton register;
@InjectView(R.id.mImage)
ImageView imageView;
@InjectView(R.id.mPager)
ViewPager viewPager;
List<TestFragment> testFragments = new ArrayList<TestFragment>();
private float x;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_password);
ButterKnife.inject(this);
Bundle args1 = new Bundle();
args1.putInt("color", Color.YELLOW);
args1.putString("url", "http://app.myzaker.com/news/article" +
".php?pk=582ac7c99490cbed04000066&f=xsunion");
TestFragment testFragment1 = TestFragment.newInstance(args1);
Bundle args2 = new Bundle();
args2.putInt("color", Color.RED);
args2.putString("url", "http://app.myzaker.com/news/article" +
".php?pk=582ac7929490cbea04000075&f=xsunion");
TestFragment testFragment2 = TestFragment.newInstance(args2);
x = imageView.getTranslationX();
LogUtils.d("x:" + x);
testFragments.add(testFragment1);
testFragments.add(testFragment2);
viewPager.setOffscreenPageLimit(1);//设置viewpager的缓存页面,经验证设置为2即缓存3张页面
viewPager.setAdapter(new FragmentAdapter(getSupportFragmentManager(), testFragments));
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int
positionOffsetPixels) {
//这里最关键的地方还是positionOffset参数(k),这个参数表示当前页面向右滑动的百分比
float imageWidth = imageView.getWidth();
float Rsize = (float) (15 + 15 * 0.2 * (positionOffset + position));
float Lsize = (float) (18 - 15 * 0.2 * (positionOffset + position));
register.setTextSize(Rsize);
login.setTextSize(Lsize);
LogUtils.d("positionOffset:" + Rsize);
imageView.setTranslationX(imageWidth * (position + positionOffset));
}
@Override
public void onPageSelected(int position) {
switch (position) {
case 0:
login.setTextColor(Color.parseColor("#7f7f7f"));
register.setTextColor(Color.parseColor("#aaaaaa"));
break;
case 1:
login.setTextColor(Color.parseColor("#aaaaaa"));
register.setTextColor(Color.parseColor("#7f7f7f"));
break;
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imageView.setTranslationX(x);
viewPager.setCurrentItem(0);
}
});
register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imageView.setTranslationX(x + imageView.getWidth());
viewPager.setCurrentItem(1);
}
});
}
}
先这样后面接着写。。。。