Giter Site home page Giter Site logo

flashview's Introduction

flashview

首页广告位轮播,用于应用程序首页的轮播图,如下图所展示:

![image] (https://github.com/gcgongchao/flashview/raw/master/images/flashviewgit20150128.gif)

使用此library时实现上图中的轮播效果时,分为以下两步骤:
(1)在布局文件中加入如下代码块:

  <com.gc.flashview.FlashView
    android:id="@+id/flash_view"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:layout_margin="10dp"
    app:effect="cube"  
    />

(2)在Activity或Fragment中,想如下那样使用该控件:

    flashView=(FlashView)findViewById(R.id.flash_view);
    imageUrls=new ArrayList<String>();
    imageUrls.add("http://www.qipaox.com/tupian/200810/20081051924582.jpg");
    imageUrls.add("http://www.bz55.com/uploads1/allimg/120312/1_120312100435_8.jpg");
    imageUrls.add("http://img3.iqilu.com/data/attachment/forum/201308/21/192654ai88zf6zaa60zddo.jpg");
    imageUrls.add("http://img2.pconline.com.cn/pconline/0706/19/1038447_34.jpg");<br/>
    imageUrls.add("http://www.kole8.com/desktop/desk_file-11/2/2/2012/11/2012113013552959.jpg");
    imageUrls.add("http://www.237.cc/uploads/pcline/712_0_1680x1050.jpg");
    flashView.setImageUris(imageUrls);
    flashView.setEffect(EffectConstants.CUBE_EFFECT);//更改图片切换的动画效果

此代码使用比较简单,后续我会加入轮播切换的效果,至于切换动画的一些类已经在里面了,下次更新时,将和自定义的控件一起使用。
(3)如果想对图片进行点击事件监听,可以在你的Activity或Fragment使用setOnPageClickListener,用法如下:

      flashView.setOnPageClickListener(new FlashViewListener() {
    	 @Override
    	 public void onClick(int position) {
    	 Toast.makeText(getApplicationContext(), "你的点击的是第"+(position+1)+"张图片!", 1000).show();
    	 }});

或者如下使用:

       flashView.setOnPageClickListener(new FlashViewListener(this); 
       @Override
       public void onClick(int position) {
       // TODO Auto-generated method stub
       Toast.makeText(getApplicationContext(), "你的点击的是第"+(position+1)+"张图片!", 1000).show();
       }

如把FlashView作为HeadView的时候,会有一个不会滚动的bug,按照如下方式修改FlashView即可:

	private void initUI(Context context) {
	imageViewsList = new ArrayList<ImageView>();
	dotViewsList = new ArrayList<ImageView>();
	imageUris = new ArrayList<String>();
	mBitmapLoader =new BitmapLoader(context);
	View view=LayoutInflater.from(context).inflate(R.layout.layout_slideshow, null);
	mLinearLayout = (LinearLayout) view.findViewById(R.id.linearlayout);
	mViewPager = (ViewPager) view.findViewById(R.id.viewpager);
	/**
	 * 解决FlashView作为HeadView时的滑动冲突
	 */
	mViewPager.setOnTouchListener(new OnTouchListener() {
		 

		@Override
		public boolean onTouch(View v, MotionEvent event) {
			// TODO Auto-generated method stub
			PointF downP = new PointF();
		    PointF curP = new PointF();
		    int act = event.getAction();
		    if(act == MotionEvent.ACTION_DOWN || act == MotionEvent.ACTION_MOVE || act ==	    MotionEvent.ACTION_UP){
		     ((ViewGroup) v).requestDisallowInterceptTouchEvent(true);
		      if (downP.x == curP.x && downP.y == curP.y) {
		        return false;
		      }
		    }
		    return false;
		}
	});
	addView(view);
	
	// mFlashViewListener必须实例化

}

如果在使用过程有任何bug,意见和指导,欢迎反馈与指导。本次加入的动画效果的代码来源于网络,在此感谢贡献此动画效果的作者。下次更新会尝试加入自己写的动画效果,欢迎star。 楼主博客地址
(Android Studio版的Demo下载地址在这个链接的博文末尾)

flashview's People

Contributors

gcgongchao avatar ylbfdev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

flashview's Issues

控件导致程序ANR问题

非常感谢将军的分享!在使用该控件的过程中,我的程序出现了anr,查看日志后发现可能是该控件引起的,下面附上anr日志(少部分,太长了),请将军指导!
----- pid 3210 at 2015-09-06 11:53:23 -----
Cmd line: com.allin.social

JNI: CheckJNI is off; workarounds are off; pins=0; globals=348

DALVIK THREADS:
(mutexes: tll=0 tsl=0 tscl=0 ghl=0)

"main" prio=5 tid=1 SUSPENDED
| group="main" sCount=1 dsCount=0 obj=0x41606e58 self=0x41522540
| sysTid=3210 nice=0 sched=0/0 cgrp=apps handle=1074348372
| state=S schedstat=( 17116004768 1300353748 8830 ) utm=1581 stm=130 core=0
at android.support.v4.view.ViewPager.populate(ViewPager.java:~1034)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:555)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:514)
at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:495)
at com.allin.social.homepage.FlashView$ImageHandler.handleMessage(FlashView.java:329)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5095)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
at dalvik.system.NativeStart.main(Native Method)

"pool-2-thread-1" prio=5 tid=42 TIMED_WAIT
| group="main" sCount=1 dsCount=0 obj=0x42e85680 self=0x79078ab8
| sysTid=3378 nice=0 sched=0/0 cgrp=apps handle=2032088408
| state=S schedstat=( 9979738 514375 42 ) utm=0 stm=0 core=1
at java.lang.Object.wait(Native Method)

  • waiting on <0x432d2d48> (a java.lang.VMThread) held by tid=42 (pool-2-thread-1)
    at java.lang.Thread.parkFor(Thread.java:1205)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:197)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2056)
    at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:435)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    at java.lang.Thread.run(Thread.java:841)

"uil-pool-d-3-thread-3" prio=5 tid=41 TIMED_WAIT
| group="main" sCount=1 dsCount=0 obj=0x42efbe60 self=0x7917f918
| sysTid=3376 nice=0 sched=0/0 cgrp=apps handle=2030395464
| state=S schedstat=( 18025103 3207031 62 ) utm=1 stm=0 core=4
at java.lang.Object.wait(Native Method)

  • waiting on <0x434b4960> (a java.lang.VMThread) held by tid=41 (uil-pool-d-3-thread-3)
    at java.lang.Thread.parkFor(Thread.java:1205)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:197)
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:429)
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:331)
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:910)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    at java.lang.Thread.run(Thread.java:841)

"uil-pool-1-thread-3" prio=3 tid=40 WAIT
| group="main" sCount=1 dsCount=0 obj=0x42e7e3a8 self=0x790612a8
| sysTid=3369 nice=13 sched=0/0 cgrp=apps/bg_non_interactive handle=2030442240
| state=S schedstat=( 13167343 3285728 17 ) utm=1 stm=0 core=4
at java.lang.Object.wait(Native Method)

  • waiting on <0x425af480> (a java.lang.VMThread) held by tid=40 (uil-pool-1-thread-3)
    at java.lang.Thread.parkFor(Thread.java:1205)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
    at com.nostra13.universalimageloader.core.assist.deque.LinkedBlockingDeque.takeFirst(LinkedBlockingDeque.java:461)
    at com.nostra13.universalimageloader.core.assist.deque.LinkedBlockingDeque.take(LinkedBlockingDeque.java:650)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    at java.lang.Thread.run(Thread.java:841)

"Timer-0" prio=5 tid=39 TIMED_WAIT
| group="main" sCount=1 dsCount=0 obj=0x42ed8708 self=0x791f3878
| sysTid=3349 nice=0 sched=0/0 cgrp=apps handle=2031559432
| state=S schedstat=( 4090051 770313 15 ) utm=0 stm=0 core=6
at java.lang.Object.wait(Native Method)

  • waiting on <0x42ed8708> (a java.util.Timer$TimerImpl)
    at java.lang.Object.wait(Object.java:401)
    at java.util.Timer$TimerImpl.run(Timer.java:238)

"Binder_3" prio=5 tid=38 NATIVE
| group="main" sCount=1 dsCount=0 obj=0x42ccece8 self=0x7916ba78
| sysTid=3336 nice=0 sched=0/0 cgrp=apps handle=2031492624
| state=S schedstat=( 5378336 5092032 31 ) utm=0 stm=0 core=1
#00 pc 00020774 /system/lib/libc.so (_ioctl+8)
#1 pc 0002d313 /system/lib/libc.so (ioctl+14)
#2 pc 0001d3ed /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+140)
#3 pc 0001daf7 /system/lib/libbinder.so (android::IPCThreadState::getAndExecuteCommand()+6)
#4 pc 0001db8d /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+48)
#5 pc 000219f5 /system/lib/libbinder.so
#6 pc 0000ea5d /system/lib/libutils.so (android::Thread::threadLoop(void)+216)
#7 pc 0004dbb5 /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void
)+68)
#8 pc 0000e58f /system/lib/libutils.so
#09 pc 0000d2c0 /system/lib/libc.so (__thread_entry+72)
#10 pc 0000d458 /system/lib/libc.so (pthread_create+240)
at dalvik.system.NativeStart.run(Native Method)

"uil-pool-1-thread-2" prio=3 tid=37 WAIT
| group="main" sCount=1 dsCount=0 obj=0x42e84610 self=0x7919b3b0
| sysTid=3332 nice=13 sched=0/0 cgrp=apps/bg_non_interactive handle=2031728648
| state=S schedstat=( 14754583 7416355 30 ) utm=1 stm=0 core=4
at java.lang.Object.wait(Native Method)

  • waiting on <0x4246cf50> (a java.lang.VMThread) held by tid=37 (uil-pool-1-thread-2)
    at java.lang.Thread.parkFor(Thread.java:1205)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
    at com.nostra13.universalimageloader.core.assist.deque.LinkedBlockingDeque.takeFirst(LinkedBlockingDeque.java:461)
    at com.nostra13.universalimageloader.core.assist.deque.LinkedBlockingDeque.take(LinkedBlockingDeque.java:650)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    at java.lang.Thread.run(Thread.java:841)

"pool-1-thread-8" prio=5 tid=36 WAIT
| group="main" sCount=1 dsCount=0 obj=0x42ee5968 self=0x78e5e3e0
| sysTid=3319 nice=0 sched=0/0 cgrp=apps handle=2032018032
| state=S schedstat=( 433699 0 2 ) utm=0 stm=0 core=1
at java.lang.Object.wait(Native Method)

  • waiting on <0x42ea0800> (a java.lang.VMThread) held by tid=36 (pool-1-thread-8)
    at java.lang.Thread.parkFor(Thread.java:1205)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1050)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:778)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    at java.lang.Thread.run(Thread.java:841)

"pool-1-thread-7" prio=5 tid=35 WAIT
| group="main" sCount=1 dsCount=0 obj=0x42ee5bf0 self=0x78e60b30
| sysTid=3318 nice=0 sched=0/0 cgrp=apps handle=1991701704
| state=S schedstat=( 1837136 0 3 ) utm=0 stm=0 core=1
at java.lang.Object.wait(Native Method)

  • waiting on <0x42ea9cf8> (a java.lang.VMThread) held by tid=35 (pool-1-thread-7)
    at java.lang.Thread.parkFor(Thread.java:1205)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1050)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:778)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    at java.lang.Thread.run(Thread.java:841)

"uil-pool-2-thread-3" prio=3 tid=34 WAIT
| group="main" sCount=1 dsCount=0 obj=0x432d32b8 self=0x76baf480
| sysTid=3296 nice=13 sched=0/0 cgrp=apps/bg_non_interactive handle=2027885456
| state=S schedstat=( 1095635791 464376407 682 ) utm=100 stm=9 core=0
at java.lang.Object.wait(Native Method)

  • waiting on <0x431bde60> (a java.lang.VMThread) held by tid=34 (uil-pool-2-thread-3)
    at java.lang.Thread.parkFor(Thread.java:1205)
    at sun.misc.Unsafe.park(Unsafe.java:325)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
    at com.nostra13.universalimageloader.core.assist.deque.LinkedBlockingDeque.takeFirst(LinkedBlockingDeque.java:461)
    at com.nostra13.universalimageloader.core.assist.deque.LinkedBlockingDeque.take(LinkedBlockingDeque.java:650)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    at java.lang.Thread.run(Thread.java:841)

有一个bug,,默认的cube类型时,从右往左主动切片时会出现多余的图片旋转

原因是position这个变量的值引起的,修正也很简单:
if(position<=1&&position>=0){
ViewHelper.setPivotX(view, 0);
ViewHelper.setPivotY(view, view.getMeasuredHeight() * 0.5f);
ViewHelper.setRotationY(view, 90f * position);
}else if(position<0&&position>=-1){
ViewHelper.setPivotX(view, view.getMeasuredWidth());
ViewHelper.setPivotY(view, view.getMeasuredHeight() * 0.5f);
//只在Y轴做旋转操作
ViewHelper.setRotationY(view, 90f * position);
}

使用FlashView时出现问题

您好,看到您的开源项目觉得对于做一个翻页广告很方便。
我开始学习了您的开源项目。首先将jar放入自己的项目的libs包中
jar
随后在layout文件中引入这个FlashView。
flashview

最后在Activity中对这个控件进行设置图片url

imageurl

但是在真机上测试时遇到了问题,引入FlashView这个控件会无法初始化
报错的日志如下
errorlog

不知道哪里出问题了,感谢您百忙之中查看我的问题,祝您生活愉快!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.