自定义banner,兼容大部分情况。
来源:互联网 发布:cocos2d x js安装教程 编辑:程序博客网 时间:2024/06/04 17:40
这是一个可以无限滚动的顶部公告。
Java代码RollAdvertise.jave:
package com.example.jun.testmybanner.fragment;import android.content.Context;import android.net.Uri;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v4.app.Fragment;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.util.Log;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.view.animation.AccelerateInterpolator;import android.view.animation.Interpolator;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.Scroller;import com.example.jun.testmybanner.R;import com.facebook.drawee.view.SimpleDraweeView;import java.lang.reflect.Field;import java.util.Timer;import java.util.TimerTask;public class RollAdvertise extends Fragment implements ViewPager.OnPageChangeListener { private View mLayoutView; private ViewPager viewPager; private ViewGroup group; private String[] urlArray; //所有的图片资源的URL private SimpleDraweeView[] sdvArray; //装所有图片的 private ImageView[] tipsArray; //装点点的ImageView数组 private String[] webViewUrlArray; //点击item后进入的webview private int arrNum = 0; private int focusedId = 0; private int unfocusedId = 0; private int animationTime = 500; //动画的时间 private int intervalTime = 2000; //动画时间与间隔的时间一起的时间 private Handler handler = null; private Timer timer = null; private TimerTask task = null; private Field field = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mLayoutView = inflater.inflate(R.layout.fragment_roll_advertise, container, false); initData(); return mLayoutView; } @Override public void onPause() { super.onPause(); } public void setAllUrl(String[] urlArray, String[] webViewUrlArray, int focused, int unfocused) { this.urlArray = urlArray; arrNum = this.urlArray.length; if (webViewUrlArray != null && webViewUrlArray.length != 0) { if (webViewUrlArray.length == 1) { this.webViewUrlArray = new String[4]; this.webViewUrlArray[0] = webViewUrlArray[0]; this.webViewUrlArray[1] = webViewUrlArray[0]; this.webViewUrlArray[2] = webViewUrlArray[0]; this.webViewUrlArray[3] = webViewUrlArray[0]; } else if (webViewUrlArray.length == 2) { this.webViewUrlArray = new String[4]; this.webViewUrlArray[0] = webViewUrlArray[0]; this.webViewUrlArray[1] = webViewUrlArray[1]; this.webViewUrlArray[2] = webViewUrlArray[0]; this.webViewUrlArray[3] = webViewUrlArray[1]; } else { this.webViewUrlArray = webViewUrlArray; } } focusedId = focused; unfocusedId = unfocused; initRoll(); startTimer(); //启动动画 } public void initRoll() { if (urlArray.length == 0 || focusedId == 0 | unfocusedId == 0) { return; } //将点点加入到ViewGroup中 tipsArray = new ImageView[arrNum]; for (int i = 0; i < tipsArray.length; i++) { ImageView imageView = new ImageView(getActivity()); imageView.setLayoutParams(new ViewGroup.LayoutParams(10, 10)); tipsArray[i] = imageView; if (i == 0) { tipsArray[i].setBackgroundResource(focusedId); } else { tipsArray[i].setBackgroundResource(unfocusedId); } LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); layoutParams.leftMargin = 5; layoutParams.rightMargin = 5; group.addView(imageView, layoutParams); } //将图片装载到数组中 if (arrNum == 1) { sdvArray = new SimpleDraweeView[4]; for (int i = 0; i < sdvArray.length; i++) { SimpleDraweeView sdv = new SimpleDraweeView(getActivity()); sdvArray[i] = sdv; sdv.setImageURI(Uri.parse(urlArray[0])); } } else if (arrNum == 2) { sdvArray = new SimpleDraweeView[4]; for (int i = 0; i < sdvArray.length; i++) { SimpleDraweeView sdv = new SimpleDraweeView(getActivity()); sdvArray[i] = sdv; sdv.setImageURI(Uri.parse(urlArray[i % 2])); } } else { sdvArray = new SimpleDraweeView[arrNum]; for (int i = 0; i < sdvArray.length; i++) { SimpleDraweeView sdv = new SimpleDraweeView(getActivity()); sdvArray[i] = sdv; sdv.setImageURI(Uri.parse(urlArray[i])); } } for (int i = 0; i < sdvArray.length; i++) { sdvArray[i].setId(i); sdvArray[i].setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("kk", v.getId() + ""); } }); } //设置Adapter viewPager.setAdapter(new MyAdapter()); //设置监听,主要是设置点点的背景 viewPager.setOnPageChangeListener(this); //设置ViewPager的默认项, 设置为长度的100倍,这样子开始就能往左滑动 viewPager.setCurrentItem((sdvArray.length) * 100); try { field = ViewPager.class.getDeclaredField("mScroller"); field.setAccessible(true); FixedSpeedScroller scroller = new FixedSpeedScroller(viewPager.getContext(), new AccelerateInterpolator()); field.set(viewPager, scroller); scroller.setmDuration(animationTime); } catch (Exception e) { e.printStackTrace(); } } private void initData() { group = (ViewGroup) mLayoutView.findViewById(R.id.viewGroup); viewPager = (ViewPager) mLayoutView.findViewById(R.id.viewPager); handler = new Handler() { public void handleMessage(Message msg) { if (msg.what == 1) { try { viewPager.setCurrentItem((viewPager.getCurrentItem() + 1), true); } catch (Exception e) { e.printStackTrace(); } } super.handleMessage(msg); } }; viewPager.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_MOVE: stopTimer(); //暂停动画 break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: startTimer(); //启动动画 break; } return false; } }); } public class MyAdapter extends PagerAdapter { @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public void destroyItem(View container, int position, Object object) { ((ViewPager) container).removeView(sdvArray[position % sdvArray.length]); } /** * 载入图片进去,用当前的position 除以 图片数组长度取余数是关键 */ @Override public Object instantiateItem(View container, int position) { try { ((ViewPager) container).addView(sdvArray[position % sdvArray.length], 0); } catch (Exception e) { e.printStackTrace(); } return sdvArray[position % sdvArray.length]; } } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int arg0) { setImageBackground(arg0 % arrNum); } /** * 设置选中的tip的背景 * * @param selectItems */ private void setImageBackground(int selectItems) { for (int i = 0; i < tipsArray.length; i++) { if (i == selectItems) { tipsArray[i].setBackgroundResource(focusedId); } else { tipsArray[i].setBackgroundResource(unfocusedId); } } } public class FixedSpeedScroller extends Scroller { private int mDuration = 1500; public FixedSpeedScroller(Context context) { super(context); } public FixedSpeedScroller(Context context, Interpolator interpolator) { super(context, interpolator); } @Override public void startScroll(int startX, int startY, int dx, int dy, int duration) { // Ignore received duration, use fixed one instead super.startScroll(startX, startY, dx, dy, mDuration); } @Override public void startScroll(int startX, int startY, int dx, int dy) { // Ignore received duration, use fixed one instead super.startScroll(startX, startY, dx, dy, mDuration); } public void setmDuration(int time) { mDuration = time; } public int getmDuration() { return mDuration; } } public void stopTimer() { if (timer != null) { timer.cancel(); timer = null; } if (task != null) { task.cancel(); task = null; } } public void startTimer() { if (timer == null) { timer = new Timer(); } if (task == null) { task = new TimerTask() { @Override public void run() { // 需要做的事:发送消息 Message message = new Message(); message.what = 1; handler.sendMessage(message); } }; } if (timer != null && task != null) timer.schedule(task, intervalTime, intervalTime); // 0s后执行task,经过intervalTime秒再次执行 }}
这是一个fragment,大家可以直接放到自己的工程中。
代码中的SimpleDraweeView是一个Facebook提供的一个加载图片的控件,大家也可以直接使用ImageView。
使用代码MainActivity.java:
package com.example.jun.testmybanner;import android.net.Uri;import android.os.Bundle;import android.support.v4.app.FragmentManager;import android.support.v7.app.AppCompatActivity;import com.example.jun.testmybanner.fragment.RollAdvertise;import com.facebook.drawee.view.SimpleDraweeView;public class MainActivity extends AppCompatActivity { private SimpleDraweeView sdvTest; private RollAdvertise fRoll; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sdvTest = (SimpleDraweeView) findViewById(R.id.sdvTest); sdvTest.setImageURI(Uri.parse("http://scimg.jb51.net/allimg/160317/14-16031G13220936.jpg")); FragmentManager fragmentManager = this.getSupportFragmentManager(); fRoll = (RollAdvertise) fragmentManager.findFragmentById(R.id.fRoll); String allUrl[] = new String[]{ "http://img3.imgtn.bdimg.com/it/u=2546610023,3120506294&fm=11&gp=0.jpg", "http://pic32.nipic.com/20130814/13162234_111708002000_2.jpg", "http://pic54.nipic.com/file/20141204/19902974_135858226000_2.jpg", "http://img03.tooopen.com/images/20131102/sy_45238929299.jpg", }; fRoll.setAllUrl(allUrl, null, R.drawable.page_indicator_focused, R.drawable.page_indicator_unfocused); }}
sdvTest = (SimpleDraweeView) findViewById(R.id.sdvTest);sdvTest.setImageURI(Uri.parse("http://scimg.jb51.net/allimg/160317/14-16031G13220936.jpg"));是介绍怎么使用SimpleDraweeView的,下面是怎么使用该fragment的。
fragment的fragment_roll_advertise.xml代码为:
<pre name="code" class="html"><FrameLayout 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="com.example.jun.testmybanner.fragment.RollAdvertise"> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="wrap_content" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <LinearLayout android:id="@+id/viewGroup" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="30dp" android:gravity="center_horizontal" android:orientation="horizontal"></LinearLayout> </RelativeLayout></FrameLayout>
activity_main.xml文件:
<FrameLayout 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="com.example.jun.testmybanner.fragment.RollAdvertise"> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="wrap_content" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <LinearLayout android:id="@+id/viewGroup" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="30dp" android:gravity="center_horizontal" android:orientation="horizontal"></LinearLayout> </RelativeLayout></FrameLayout>
0 0
- 自定义banner,兼容大部分情况。
- banner自定义
- 自定义banner
- 自定义Banner
- 给予 HorizontalListView 自定义banner
- spring boot 自定义banner
- 自定义广告Banner条
- Spring Boot自定义Banner
- Spring Boot自定义Banner
- SpringBoot 自定义Banner
- springboot生成自定义banner
- css兼容大部分浏览器透明背景设置
- 自定义的android 广告banner
- 自定义View----Banner广告条
- Android 自定义Banner广告轮播图
- SpringBoot入门(四)-自定义banner
- 自定义jQuery 无缝Banner插件
- SpringBoot自定义个性化的banner
- Hadoop:Hadoop简介及环境配置
- 【BZOJ1412】[ZJOI2009]狼和羊的故事【最小割】
- 文字增加右上角的标签(上标sup)
- Activity中动态设置TextView的颜色
- IOS 关键字
- 自定义banner,兼容大部分情况。
- Mybatis技术(五)Mybatis调用存储过程
- 网络层(1)
- mac下为iOS app制作gif展示动画图
- block语法
- stringByAppendingPathComponent和stringByAppendingString的区别
- Codeforces3D#51nod1476 括号匹配的最小代价
- maven的使用方法
- php基础知识