Android仿一号店货物详情轮播图动画效果
还不是很完全,目前只能点中间图片才能位移,图片外的其他区域没有。。(属性动画),对了,图片加载用得是facebook的一款android图片加载库,感觉非常NB啊,完爆一切。
创新互联公司从2013年成立,公司以成都网站建设、成都网站制作、系统开发、网络推广、文化传媒、企业宣传、平面广告设计等为主要业务,适用行业近百种。服务企业客户超过千家,涉及国内多个省份客户。拥有多年网站建设开发经验。为企业提供专业的网站建设、创意设计、宣传推广等服务。 通过专业的设计、独特的风格,为不同客户提供各种风格的特色服务。
1、先看布局
<?xml version="1.0" encoding="utf-8"?>
2、主界面代码
package com.newair.frescotextdemo; import android.animation.Animator; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.Toast; import java.util.ArrayList; import java.util.List; import adapter.MyViewPagerAdapter; import utils.ScreenUtils; public class MainActivity extends AppCompatActivity { private ScrollView scrollView; private LinearLayout ll_container_scroll;//scrollview第一层容器 private LinearLayout ll_bottom_container;//底部容器 private ViewPager viewPager;//滚动列表 private ViewPager viewPager_2; private MyViewPagerAdapter myViewPagerAdapter;//适配器 private Listimage_urls; private int y; //记住位移了多少 private boolean isRunAnimation = false;//判断当前动画是否执行完成 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); initEvent(); } private void initView() { scrollView = (ScrollView) findViewById(R.id.scrollView); ll_container_scroll = (LinearLayout) findViewById(R.id.ll_container_scroll); ll_bottom_container = (LinearLayout) findViewById(R.id.ll_bottom_container); viewPager = (ViewPager) findViewById(R.id.viewPager); viewPager_2 = (ViewPager) findViewById(R.id.viewPager_2); } private void initData() { image_urls = new ArrayList<>(); image_urls.add("/upload/otherpic73/129349.gif"); image_urls.add("/upload/otherpic73/129350.gif"); image_urls.add("/upload/otherpic73/129351.gif"); image_urls.add("/upload/otherpic73/129352.gif"); image_urls.add("/upload/otherpic73/129353.gif"); myViewPagerAdapter = new MyViewPagerAdapter(this, image_urls); viewPager.setAdapter(myViewPagerAdapter); viewPager_2.setAdapter(myViewPagerAdapter); } private void initEvent() { //当前页的点击事件 myViewPagerAdapter.setOnCurrentPositionClickListener(new MyViewPagerAdapter.OnCurrentViewClick() { @Override public void onCurrentPositionClick(int position) { if (viewPager.getTag() == null || ((Integer) viewPager.getTag()) == 1) { showAnimation(); } else { hideAnimation(); } } }); ll_bottom_container.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { hideAnimation(); } }); } //显示动画 public void showAnimation() { if (!isRunAnimation) { isRunAnimation = true; int scrollY = scrollView.getScrollY(); y = scrollY + ((ll_container_scroll.getMeasuredHeight() / 2) - (viewPager.getMeasuredHeight() / 2)); viewPager.animate() .x(0f) .y(y * 1f) .setDuration(500) .setListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { ll_bottom_container.setVisibility(View.INVISIBLE); } @Override public void onAnimationEnd(Animator animation) { isRunAnimation = false; viewPager.setTag(2); y = 0; ll_container_scroll.setVisibility(View.VISIBLE); viewPager_2.setCurrentItem(viewPager.getCurrentItem(),false); } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); } } //关闭动画 public void hideAnimation() { if (!isRunAnimation) { viewPager.animate() .x(0f) .y(-y * 1f) .setDuration(500) .setListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { ll_container_scroll.setVisibility(View.INVISIBLE); viewPager.setCurrentItem(viewPager_2.getCurrentItem(),false); } @Override public void onAnimationEnd(Animator animation) { isRunAnimation = false; viewPager.setTag(1); y = 0; ll_bottom_container.setVisibility(View.VISIBLE); } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); } } }
3、viewpager的适配器代码
package adapter; import android.content.Context; import android.net.Uri; import android.support.v4.view.PagerAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.facebook.drawee.view.SimpleDraweeView; import com.newair.frescotextdemo.R; import java.util.List; /** * Created by ouhimehime on 16/4/28. * ---------ViewPager适配器---------- */ public class MyViewPagerAdapter extends PagerAdapter { public interface OnCurrentViewClick { void onCurrentPositionClick(int position); } private OnCurrentViewClick onCurrentViewClick; public void setOnCurrentPositionClickListener(OnCurrentViewClick onCurrentViewClick) { this.onCurrentViewClick = onCurrentViewClick; } private Context context; private ListmyData; public MyViewPagerAdapter(Context context, List myData) { this.context = context; this.myData = myData; } @Override public int getCount() { return myData.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, final int position) { SimpleDraweeView simpleDraweeView = (SimpleDraweeView) LayoutInflater.from(context).inflate(R.layout.image_view, null); Uri uri = Uri.parse(myData.get(position)); simpleDraweeView.setImageURI(uri); container.addView(simpleDraweeView); simpleDraweeView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onCurrentViewClick.onCurrentPositionClick(position); } }); return simpleDraweeView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((SimpleDraweeView) object); } }
4、facebook的加载图片的控件
<?xml version="1.0" encoding="utf-8"?>
还不是很好,感兴趣的可运行下看看。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持创新互联。
标题名称:Android仿一号店货物详情轮播图动画效果
本文路径:http://cdiso.cn/article/pihjpi.html