java页面刷新的加载动画,java-要在viewpager页面上启动动画,但是页面已预加载

在我的项目中,我有几个屏幕(片段),我想给片段元素(视图)赋予动画效果.我已经使用过View pager和Viewpager适配器以及片段.我面临的主要问题是

>在开始时正在加载2页,就像在开始时正在加载page1和page2.如果滑动到第二页,则它会自动加载第三页.

>我需要显示使用Universal tween engine的view(RelativeLayout)的动画.

代码有问题吗?

这是MainActivity.java代码-

public class MainActivity extends FragmentActivity {

ViewPager viewPager;

PagerAdapter adapter;

CirclePageIndicator mIndicator;

private int mWidthScreen;

private int mHeightScreen;

private Bundle bundle;

private List frgScreens;

private int selectedtheme;

private Handler mHandler = new Handler();

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.viewpager_main); // Get the view from viewpager_main.xml

buildargument();

initialisePaging(); // Page creating function

}

private void initialisePaging(int theme) {

viewPager = (ViewPager) findViewById(R.id.pager);

frgScreens = new Vector(); // clearing old entries

viewPager.setOffscreenPageLimit(0);

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

//Loading fragment # position

//Instead of starting animation from onCreate start it from here

//Only for the first time (for page 1) this callback will not trigger

}

@Override

public void onPageSelected(int position) {

}

@Override

public void onPageScrollStateChanged(int state) {

}

});

frgScreens = this.basicThemes();

// Bind result to ViewPagerAdapter

adapter = new ViewPagerAdapter(this.getSupportFragmentManager(), frgScreens);

this.viewPager.setAdapter(adapter);

}

/*

* Basic fragments

*/

private List basicThemes() {

// declaring fragments Group Basic

Fragment frgBasic1 = Fragment.instantiate(this, Basic1.class.getName());

Fragment frgBasic2 = Fragment.instantiate(this, Basic2.class.getName());

Fragment frgBasic3 = Fragment.instantiate(this, Basic3.class.getName());

Fragment frgBasic4 = Fragment.instantiate(this, Basic4.class.getName());

Fragment frgBasic5 = Fragment.instantiate(this, Basic5.class.getName());

// Passing arguments

frgBasic1.setArguments(bundle);

frgBasic2.setArguments(bundle);

frgBasic3.setArguments(bundle);

frgBasic4.setArguments(bundle);

frgBasic5.setArguments(bundle);

// Loading screens into Fragment list

List frgBasicScreens = new Vector();

frgBasicScreens.add(frgBasic1);

frgBasicScreens.add(frgBasic2);

frgBasicScreens.add(frgBasic3);

frgBasicScreens.add(frgBasic4);

frgBasicScreens.add(frgBasic5);

return frgBasicScreens;

}

private void getScreenHeightWidhth() {

DisplayMetrics localDisplayMetrics = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(localDisplayMetrics);

this.mWidthScreen = localDisplayMetrics.widthPixels;

this.mHeightScreen = localDisplayMetrics.heightPixels;

mHandler.post(

new DisplayToast(this, "Width Screen:" + mWidthScreen + ". Height Screen: " + mHeightScreen + "."));

}

private void buildargument() {

this.bundle = new Bundle();

bundle.putInt("mWidthScreen", this.mWidthScreen);

}

@Override

protected void onResume() {

super.onResume();

}

@Override

public void onDestroy() {

super.onDestroy();

}}

现在ViewPagerAdapter.java

public class ViewPagerAdapter extends FragmentPagerAdapter {

private List screens;

public ViewPagerAdapter(FragmentManager fm, List fragments ) {

super(fm);

this.screens = fragments;

}

@Override

public Fragment getItem(int pos) {

// getting the position of the item

return this.screens.get(pos);

}

@Override

public int getCount() {

// Getting the size of screen passed

return this.screens.size();

}}

skinbase.java是所有基础知识屏幕使用的通用类的某些共享方法.

public abstract class SkinsBase extends Fragment

{

protected int mWidthScreen;

protected int mHeightScreen;

public int skinHeight;

public int skinWidth;

public final int textShadowSize = 2;

.................

}

现在basic1.java

public class Basic1 extends SkinsBase {

private RelativeLayout mBlueBackground;

private Handler mHandler = new Handler();

private static final String TAG = "Basic1";

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

if (container == null) {

return null;

}

mContext = container.getContext();

View v = inflater.inflate(R.layout.blank_viewpager_item, container, false);

mLayoutForeground = (RelativeLayout) v.findViewById(R.id.relative);

mBlueBackground = initshape(getResources().getColor(R.color.transparent_blue_80),this.mWidthScreen, (int) (0.10F * this.mWidthScreen), 0,(int) (0.12F *this.mWidthScreen));

this.mLayoutForeground.addView(this.mBlueBackground);

Log.e(TAG, "Inside basic 1 ");

return v;

}

public RelativeLayout initshape(int intColor,int intWidthscreen, int intHeight, int intMerginLeft,int intMerginTop) {

RelativeLayout localRelativeLayout = new RelativeLayout(this.mContext);

localRelativeLayout.setBackgroundColor(intColor);

RelativeLayout.LayoutParams localLayoutParams = new RelativeLayout.LayoutParams(intWidthscreen, intHeight);

localLayoutParams.setMargins(intMerginLeft, intMerginTop, 0, 0);

localRelativeLayout.setLayoutParams(localLayoutParams);

return localRelativeLayout;

}

public void onResume() {

super.onResume();

}

@Override

public void onPause() {

super.onPause();

}}

其他basic2.java,basic3.java,basic4.java …..的方式类似basic1.java

我需要将动画应用于RelativeLayout.可能吗?我想在页面加载之前就开始动画的开始.

解决方法:

view-pager的默认行为是从当前页面的两侧至少预加载1页.见以下链接

因此,您可以做的是,而不是从onCreateScroll回调中启动动画onCreate来开始

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

//Loading fragment # position

//Instead of starting animation from onCreate start it from here

//Only for the first time (for page 1) this callback will not trigger

}

@Override

public void onPageSelected(int position) {

}

@Override

public void onPageScrollStateChanged(int state) {

}

});

Set the number of pages that should be retained to either side of the

current page in the view hierarchy in an idle state. Pages beyond this

limit will be recreated from the adapter when needed.

This is offered as an optimization. If you know in advance the number

of pages you will need to support or have lazy-loading mechanisms in

place on your pages, tweaking this setting can have benefits in

perceived smoothness of paging animations and interaction. If you have

a small number of pages (3-4) that you can keep active all at once,

less time will be spent in layout for newly created view subtrees as

the user pages back and forth.

You should keep this limit low, especially if your pages have complex

layouts. This setting defaults to 1.

标签:android,java,android-fragments,android-viewpager

来源: https://codeday.me/bug/20191012/1900486.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java在窗口上加载显示GIF动画图像,将多个独立的GIF图像串联在一起显示,形成GIF特有的动画形式。主要代码如下:   ImageIcon[] images; //用于动画的图标数组   Timer animationTimer;   int currentImage = 0; //当前图像编号   int delay = 500; //图像切换延迟   int width; //图像宽度   int height; //图像高度   public AnimatorIcon() //构造函数   {    setBackground(Color.white);    images = new ImageIcon[2]; //初始化数组    for (int i=0;i   images[i]=new ImageIcon(getClass().getResource("image" i ".gif")); //实例化图标    width = images[0].getIconWidth(); //初始化宽度值    height = images[0].getIconHeight(); //初始化高度值   }   public void paintComponent(Graphics g) { //重载组件绘制方法    super.paintComponent(g); //调用父类函数    images[currentImage].paintIcon(this,g,70,0); //绘制图标    currentImage=(currentImage 1)%2; //更改当前图像编号   }   public void actionPerformed(ActionEvent actionEvent) {    repaint();   }   public void startAnimation() { //开始动画    if (animationTimer==null) {    currentImage=0;    animationTimer=new Timer(delay, this); //实例化Timer对象    animationTimer.start(); //开始运行    } else if (!animationTimer.isRunning()) //如果没有运行    animationTimer.restart(); //重新运行   }   public void stopAnimation() {    animationTimer.stop(); //停止动画   }   public static void main(String args[]) {    AnimatorIcon animation = new AnimatorIcon(); //实例化动画图标    JFrame frame = new JFrame("动画图标"); //实例化窗口对象    frame.getContentPane().add(animation); //增加组件到窗口上    frame.setSize(200, 100); //设置窗口尺寸    frame.setVisible(true); //设置窗口可视    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口时退出程序    animation.startAnimation(); //开始动画
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值