ViewPager切换的时候,添加图片的缩放效果

看了别人的帖子,我做了个一个非常非常简单的效果。


就是上面的效果,图片截的有点大。。。


布局文件很简单,就一个viewpager

<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=".MainActivity" >

    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#000"
        />
        
</RelativeLayout>

然后就开始一个写逻辑,我这里为了图方便,什么都写在一个Activity里面了。

package com.zdl.viewpageranim;

import java.util.ArrayList;
import java.util.List;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;

public class MainActivity extends Activity {

	private MyAdapter adapter;
	private List<ImageView> datas = new ArrayList<ImageView>();
	private int[] images = 
		{R.drawable.image, R.drawable.image1, R.drawable.image2, R.drawable.image3};
	private ViewPager vp;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		init();
	}

	private void init() {
		vp = (ViewPager) findViewById(R.id.vp);
		for (int i=0; i<images.length; i++) {
			ImageView iv = new ImageView(this);
			ViewPager.LayoutParams lp = new ViewPager.LayoutParams();
			lp.height = ViewPager.LayoutParams.MATCH_PARENT;
			lp.width = ViewPager.LayoutParams.MATCH_PARENT;
			iv.setLayoutParams(lp);
			iv.setScaleType(ScaleType.FIT_XY);
			iv.setImageResource(images[i]);
			datas.add(iv);
		}
		adapter = new MyAdapter(datas);
		vp.setAdapter(adapter);
		
		vp.setOnPageChangeListener(new OnPageChangeListener() {
			
			@Override
			public void onPageSelected(int arg0) {
			}
			
			@SuppressLint("NewApi")
			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {
				if (arg0 < datas.size() - 1) {
					int padding = (int) (200 * (1 - arg1));
					datas.get(arg0 + 1).setPadding(padding, padding, padding, padding);
					datas.get(arg0 + 1).setAlpha(arg1);
				}
			}
			
			@Override
			public void onPageScrollStateChanged(int arg0) {
			}
		});
	}
}
接着适配器是这么写的:

package com.zdl.viewpageranim;

import java.util.List;

import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

public class MyAdapter extends PagerAdapter {

	private List<ImageView> datas;
	
	public MyAdapter(List<ImageView> datas) {
		this.datas = datas;
	}
	
	@Override
	public void destroyItem(ViewGroup container, int position, Object object) {
		container.removeView(datas.get(position));
	}

	@Override
	public Object instantiateItem(ViewGroup container, int position) {
		if (datas.get(position).getParent() == null) {
			container.addView(datas.get(position));
		}
		return datas.get(position);
	}

	@Override
	public int getCount() {
		return datas.size();
	}

	@Override
	public boolean isViewFromObject(View arg0, Object arg1) {
		return arg0 == arg1;
	}

}

刚开始,我用了iv.setBackgroundResource(resid)这个方法,发现背后的图片根本没有变化,一想不对啊,要设置padding,肯定是要设置ImageView的内容,所以改成

setImageResource()就好了。

对于viewpager监听的问题,可以看看我上篇文章的分析。

其实,一篇文章的好坏是你看后是否有举一反三的作用,有时候读一篇文章会让你觉得,原来那个我们不怎么注意的属性还有这样神奇的功效。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的示例代码,演示如何使用ViewPager实现广告页轮播、卡片切换和卡片缩放动画。 1. 布局文件 在布局文件中,我们需要添加一个ViewPager控件,并为ViewPager设置相应的布局参数,如下所示: ```xml <androidx.viewpager.widget.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="200dp" android:clipToPadding="false" android:paddingLeft="50dp" android:paddingRight="50dp" android:overScrollMode="never"/> ``` 注意,我们在这里设置了ViewPager的clipToPadding属性为false,这是为了让ViewPager的子视图可以超出ViewPager的边界,从而实现卡片切换效果。我们还设置了ViewPager的paddingLeft和paddingRight属性,以便在ViewPager的两侧留出一些空白区域。 2. ViewPager适配器 接下来,我们需要创建一个ViewPager适配器,用于管理ViewPager中的视图。在这个适配器中,我们可以根据需要添加或删除ViewPager中的子视图,并为这些子视图设置相应的布局参数和动画效果。 ```java public class ViewPagerAdapter extends PagerAdapter { private Context mContext; private List<Integer> mImageIds; public ViewPagerAdapter(Context context, List<Integer> imageIds) { mContext = context; mImageIds = imageIds; } @Override public int getCount() { return mImageIds.size(); } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view == object; } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { ImageView imageView = new ImageView(mContext); imageView.setImageResource(mImageIds.get(position)); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); // 添加缩放动画效果 if (position == 0) { imageView.setScaleX(1.2f); imageView.setScaleY(1.2f); } else { imageView.setScaleX(1.0f); imageView.setScaleY(1.0f); } container.addView(imageView); return imageView; } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView((View) object); } } ``` 在这个适配器中,我们需要重写一些方法: - getCount():返回ViewPager中子视图的数量。 - isViewFromObject():判断一个视图是否是由给定的对象生成的。 - instantiateItem():当一个视图需要被添加ViewPager中时,会调用这个方法来创建这个视图,并将它添加ViewPager中。 - destroyItem():当一个视图需要被从ViewPager中删除时,会调用这个方法来删除这个视图。 在instantiateItem()方法中,我们为每个子视图设置了一个默认的缩放比例,同时也可以根据需要设置子视图的其他动画效果。 3. 设置ViewPager的滑动效果 为了让ViewPager的滑动效果更加流畅,我们可以为ViewPager设置一些滑动效果参数: ```java viewPager.setClipToPadding(false); viewPager.setPadding(50, 0, 50, 0); viewPager.setPageMargin(20); viewPager.setOffscreenPageLimit(3); viewPager.setPageTransformer(true, new ViewPager.PageTransformer() { @Override public void transformPage(@NonNull View page, float position) { float scale = 1 - Math.abs(position) * 0.2f; page.setScaleX(scale); page.setScaleY(scale); } }); ``` 在这里,我们设置了ViewPager的clipToPadding属性为false,同时设置了ViewPager的padding属性和pageMargin属性,以便在ViewPager的两侧留出一些空白区域,并为ViewPager中的子视图之间添加一些间隔。我们还设置了ViewPager的offscreenPageLimit属性,以便预加载一些子视图,以提高滑动效果的流畅度。 最后,我们为ViewPager设置了一个PageTransformer,这个PageTransformer可以为ViewPager中的每个子视图设置一个动画效果。在这里,我们为每个子视图设置了一个缩放效果,使得ViewPager中的子视图在滑动过程中可以自动缩放。 4. 加载ViewPager 在Activity或Fragment中,我们只需要创建一个ViewPagerAdapter对象,并将这个适配器设置到ViewPager中即可: ```java List<Integer> imageIds = new ArrayList<>(); imageIds.add(R.drawable.advertisement1); imageIds.add(R.drawable.advertisement2); imageIds.add(R.drawable.advertisement3); ViewPagerAdapter adapter = new ViewPagerAdapter(getContext(), imageIds); ViewPager viewPager = findViewById(R.id.view_pager); viewPager.setAdapter(adapter); ``` 这样,就可以完成Android中使用ViewPager实现广告页轮播、卡片切换和卡片缩放动画的代码了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值