ม้าหมุนของรูปภาพหน้าแรก
/** * การควบคุมการหมุนอัตโนมัติสำหรับรูปภาพโฆษณา</br> * */คลาสสาธารณะ ImageCycleView ขยาย LinearLayout { /** * บริบท*/ บริบทส่วนตัว mContext; /** * มุมมองการหมุนรูปภาพ*/ ViewPager ส่วนตัว mAdvPager = null; ** * การปรับมุมมองภาพแบบเลื่อน*/ ImageCycleAdapter ส่วนตัว mAdvAdapter; /** * การควบคุมตัวบ่งชี้การหมุนภาพ*/ ViewGroup mGroup ส่วนตัว /** * ภาพหมุนระบุแต่ละภาพ */ ImageView ส่วนตัว mImageView = null; /** * รายการมุมมองคำสั่งเลื่อนภาพ */ ImageView ส่วนตัว [] mImageViews = null; /** * การเลื่อนรูปภาพปัจจุบันตัวห้อย */ บูลีนส่วนตัว isStop; * ไม่ว่าเคอร์เซอร์จะเป็นวงกลมหรือยาว หากตั้งค่าเป็น 1 จะเป็นวงกลม โดยค่าเริ่มต้นจะเป็นวงกลม */ public int stype=1; บริบทพารามิเตอร์ */ public ImageCycleView(บริบทบริบท) { super(context); } /** * @param context * @param attrs */ @SuppressLint("Recycle") ImageCycleView สาธารณะ (บริบทบริบท AttributeSet attrs) { super(context, attrs); = บริบท; LayoutInflater.from(บริบท).พอง(R.layout.ad_cycle_view, นี้); mAdvPager = (ViewPager) findViewById(R.id.adv_pager); mAdvPager.setOnPageChangeListener(new GuidePageChangeListener()); // เลื่อนตัวบ่งชี้มุมขวาล่างของรูปภาพ mGroup = (ViewGroup) findViewById(R.id.viewGroup); * การสัมผัสจะหยุดตัวจับเวลา ลิฟต์จะเริ่มจับเวลา*/ @แทนที่บูลีนสาธารณะ DispatchTouchEvent(เหตุการณ์ MotionEvent) { if(event.getAction()==MotionEvent.ACTION_UP){/ // เริ่มการเลื่อนรูปภาพ startImageTimerTask(); }else{ // หยุดการเลื่อนรูปภาพ stopImageTimerTask(); } return super.dispatchTouchEvent(event); } /** * โหลดข้อมูลรูปภาพ * * @param imageUrlList * @param imageCycleViewListener */ โมฆะสาธารณะ setImageResources(ArrayList<Integer> imageUrlList,ImageCycleViewListener imageCycleViewListener,int stype){ this.stype=stype; // Clear mGroup.removeAllViews(); // จำนวนโฆษณารูปภาพสุดท้าย int imageCount = imageUrlList.size(); mImageViews = ImageView ใหม่ [imageCount]; สำหรับ (int i = 0; i < imageCount; i++) { mImageView = new ImageView(mContext); LayoutParams=newเค้าโครงParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); mImageViews[i] = mImageView; if (i == 0) { if(this.stype==1)// mImageViews[i].setBackgroundResource(R.drawable.banner_dian_focus); mImageViews[i].setBackgroundResource(R.drawable .cicle_banner_dian_focus);//เปลี่ยนเป็นอย่างอื่น mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_focus); } else { if(this.stype==1) // mImageViews[i].setBackgroundResource(R.drawable.banner_dian_blur); mImageViews[i].setBackgroundResource(R .drawable.cicle_banner_dian_blur); mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_blur); } mGroup.addView(mImageViews[i]); } mAdvAdapter = ใหม่ ImageCycleAdapter(mContext, imageUrlList,imageCycleViewListener); mAdvPager.setCurrentItem(Integer.MAX_VALUE/2); startImageTimerTask(); } โมฆะสาธารณะ setImageResources2(ArrayList<Integer> imageUrlList ,ImageCycleViewListener imageCycleViewListener,int stype){ this.stype=stype; // ล้าง mGroup.removeAllViews(); จำนวนโฆษณาแบบรูปภาพ int สุดท้าย imageCount = imageUrlList.size(); mImageViews = new ImageView[imageCount]; i < imageCount; i++) { mImageView = new ImageView(mContext); LayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams. WRAP_CONTENT); params.leftMargin=30; mImageView.setScaleType(ScaleType.CENTER_CROP); mImageView.setLayoutParams(params); mImageViews[i] = mImageView; if (i == 0) { ถ้า (this.stype==1)// mImageViews[i].setBackgroundResource(R .drawable.banner_dian_focus); mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_focus);//เปลี่ยนอย่างอื่น mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_focus); } else { if(this.stype==1) // mImageViews[i ] .setBackgroundResource(R.drawable.banner_dian_blur); mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_blur); อื่น mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_blur); } mGroup.addView(mImageViews[i]); } mAdvAdapter = new ImageCycleAdapter(mContext, imageUrlList ,imageCycleViewListener); mAdvPager.setAdapter(mAdvAdapter); mAdvPager.setCurrentItem(Integer.MAX_VALUE/2); startImageTimerTask(); } /** * ภาพหมุน (ควบคุมด้วยตนเองของม้าหมุนอัตโนมัติหรือไม่, สะดวกสำหรับการควบคุมทรัพยากร) */ สาธารณะ เป็นโมฆะ startImageCycle() { startImageTimerTask(); } /** * หยุดภาพหมุนชั่วคราว - ใช้เพื่อบันทึกทรัพยากร*/ public void pushImageCycle() { stopImageTimerTask(); } /** * Image scrolling job*/ private void startImageTimerTask() { stopImageTimerTask(); // การเลื่อนรูปภาพ mHandler.postDelayed(mImageTimerTask, 5000 } /** * หยุดงานเลื่อนรูปภาพ*/ โมฆะส่วนตัว stopImageTimerTask() { isStop=true; mHandler.removeCallbacks(mImageTimerTask); } ตัวจัดการส่วนตัว mHandler = ตัวจัดการใหม่ (); ) { ถ้า (mImageViews != null) { mAdvPager.setCurrentItem(mAdvPager.getCurrentItem()+1); if(!isStop){ //if isStop=true //เมื่อคุณออก คุณจะต้องหยุดการทำงานนี้ ไม่เช่นนั้นจะยังคงมีอยู่และวนซ้ำใน mHandler พื้นหลัง postDelayed( mImageTimerTask, 5000); } } } }; /** * การตรวจสอบภาพแบบหมุน* * @author minking */ private GuidePageChangeListener คลาสสุดท้ายใช้ OnPageChangeListener { @แทนที่โมฆะสาธารณะ onPageScrollStateChanged (int state) { ถ้า (สถานะ == ViewPager.SCROLL_STATE_IDLE) startImageTimerTask (); } @ แทนที่โมฆะสาธารณะ onPageScrolled (int arg0, float arg1, int arg2) { } @ แทนที่สาธารณะ เป็นโมฆะ onPageSelected (ดัชนี int) { index=index%mImageViews.length; // ตั้งค่ารูปภาพที่แสดงอยู่ในปัจจุบัน // ตั้งค่าตัวบ่งชี้การเลื่อนรูปภาพกลับ if(stype!=1) mImageViews[index].setBackgroundResource(R.drawable.cicle_banner_dian_focus); else mImageViews[index] .setBackgroundResource(R.drawable.cicle_banner_dian_focus); สำหรับ (int i = 0; i < mImageViews.length; i++) { if (index != i) { if(stype!=1) mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_blur); else mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_blur) ; } } } } ImageCycleAdapter คลาสส่วนตัวขยาย PagerAdapter { /** * รายการแคชมุมมองรูปภาพ*/ ArrayList ส่วนตัว<SmartImageView> mImageViewCacheList; /** * รายการทรัพยากรรูปภาพ*/ //private ArrayList<String> mAdList = new ArrayList<String>(); private ArrayList<Integer> mAdList = new ArrayList<Integer>(); /** * การตรวจสอบการคลิกรูปภาพโฆษณา*/ ImageCycleViewListener ส่วนตัว mImageCycleViewListener; บริบทส่วนตัว mContext;// สาธารณะ ImageCycleAdapter (บริบทบริบท, ArrayList<String> adListener, ImageCycleViewListener) // this.mContext = บริบท; // this.mAdList = adListener; // mImageCycleViewListener = imageCycleViewListener; ใหม่ ArrayList<SmartImageView>();// } สาธารณะ ImageCycleAdapter (บริบทบริบท, ArrayList<Integer> adListener; mImageViewCacheList = new ArrayList<SmartImageView>( ); } @แทนที่ public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject (ดูมุมมอง, Object obj) { return view == obj; } @Override public Object InstantiateItem (คอนเทนเนอร์ ViewGroup, ตำแหน่ง int สุดท้าย) { int imageUrl = mAdList .get(position%mAdList.size()); Log.e("imageUrl:",position%mAdList.size()+"--"+imageUrl+""); SmartImageView imageView = null; if (mImageViewCacheList.isEmpty()) { imageView = ใหม่ SmartImageView(mContext); .setLayoutParams(LayoutParams ใหม่ (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); //test imageView.setScaleType(ImageView.ScaleType.CENTER_COP); } อื่น ๆ { imageView = mImageViewCacheList.remove(0); } imageView.setTag(imageUrl); .setImageUrl(imageUrl); imageView.setBackgroundResource(imageUrl); // ตั้งค่าตัวฟังการคลิกรูปภาพ imageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mImageCycleViewListener.onImageClick(position%mAdList.size(), v); } }); โมฆะสาธารณะ destroyItem (คอนเทนเนอร์ ViewGroup, ตำแหน่ง int, วัตถุวัตถุ) { มุมมอง SmartImageView = (SmartImageView) object; mAdvPager.removeView(view); mImageViewCacheList.add(view); } } /** * การฟังเหตุการณ์สำหรับการควบคุมแบบหมุน* * @author minking */ public static interface ImageCycleViewListener { /** * คลิกที่ภาพ เหตุการณ์ * * ตำแหน่ง @param * @param imageView */ โมฆะสาธารณะ onImageClick (ตำแหน่ง int, ดู imageView);
มาดูการควบคุมภาพหมุนโดยใช้ Android ViewPager กัน
แพ็คเกจ me.lanfog.myandroid.widget; นำเข้า java.util.ArrayList; นำเข้า java.util.List; นำเข้า android.content.Context; นำเข้า android.os.Handler; นำเข้า android.os.Message; นำเข้า android.support.v4 .view.PagerAdapter;นำเข้า android.support.v4.view.ViewPager;นำเข้า android.util.AttributeSet;นำเข้า android.util.Log;นำเข้า android.view.View;นำเข้า android.view.ViewGroup;นำเข้า android.widget.ImageView; คลาสสาธารณะ PageFlipper ขยาย ViewPager { สตริงส่วนตัว TAG = PageFlipper.class.getSimpleName(); รายการส่วนตัว<ดู> views; อะแดปเตอร์ PagerAdapter ส่วนตัว = PagerAdapter ใหม่ () { @Override วัตถุสาธารณะ InstantiateItem (คอนเทนเนอร์ ViewGroup ตำแหน่ง int) { ดู v = views.get (ตำแหน่ง); return v; } @Override บูลีนสาธารณะ isViewFromObject (ดู arg0, Object arg1) { return arg0 == arg1; views.indexOf (วัตถุ); } @ แทนที่โมฆะสาธารณะ destroyItem (คอนเทนเนอร์ ViewGroup ตำแหน่ง int วัตถุวัตถุ) { container.removeView((View)object); } @Override public int getCount() { return views == null ? 0 : views.size(); } }; ส่วนตัว OnPageChangeListener() { /** * Will แปลงตำแหน่งควบคุมเป็นตำแหน่งในชุดข้อมูล*/ public int แปลง(ตำแหน่ง int){ ตำแหน่งย้อนกลับ == 0 ? views.size()-1 : ( ตำแหน่ง > views.size() ? 0 : ตำแหน่ง-1 ); } @แทนที่ โมฆะสาธารณะ onPageSelected(ตำแหน่ง int) { if(listener2 != null){ Listener2.onPageSelected(แปลง(ตำแหน่ง)); } @แทนที่ โมฆะสาธารณะ onPageScrolled(ตำแหน่ง int, เปอร์เซ็นต์ลอย, int offset) { if(listener2 != null){ Listener2.onPageScrolled(แปลง(ตำแหน่ง), เปอร์เซ็นต์, ออฟเซ็ต); if(percent == 0){ if(position == 0) // สลับไปที่หน้าสุดท้าย setCurrentItem(( views.size() - 2 ) % views.size(), false); else if(position == views .size() - 1) // สลับไปที่ setCurrentItem(1, false); } } @Override public void onPageScrollStateChanged(int state) { if(listener2 != null){ Listener2.onPageScrollStateChanged(state); } สวิตช์ (สถานะ) { case SCROLL_STATE_IDLE: // Idle if(!handler.hasMessages(START_FLIPPING)) handler.sendEmptyMessageDelayed(START_FLIPPING, 3000); // SCROLL_STATE_DRAGGING: // handler.sendEmptyMessage(STOP_FLIPPING); // ยกเลิกการเลื่อนตัวแบ่ง; case SCROLL_STATE_SETTLING: // การลากสิ้นสุดลง ตัวจัดการส่วนตัว = ตัวจัดการใหม่ { โมฆะสาธารณะ handleMessage (ข้อความข้อความ) { สวิตช์ (msg.what) { case START_FLIPPING: if(views.size() > 3) // เนื่องจากหน้าแรกและหน้าหลังเป็นหน้าเสริม 3 ในที่นี้หมายถึงเพียง 1 หน้า setCurrentItem((getCurrentItem() + 1) % views.size ()); handler.sendEmptyMessageDelayed (START_FLIPPING, 3000); // การเลื่อนล่าช้ากรณี STOP_FLIPPING: handler.removeMessages(START_FLIPPING); แบ่งสาธารณะ PageFlipper (บริบทบริบท attrs) { super (บริบท, attrs); ; } โมฆะส่วนตัว init(){ setOffscreenPageLimit(1); // หมายเลขแคชหน้าสูงสุด setAdapter (อะแดปเตอร์); // อะแดปเตอร์ super.setOnPageChangeListener (ผู้ฟัง); // Listener handler.sendEmptyMessageDelayed (START_FLIPPING, 3000); // การเลื่อนล่าช้า} setViews สาธารณะ (int [] ids) { this ใหม่ ArrayList<ดู>(); สำหรับ (int i=0;i<ids.length+2;i++){ // เพิ่มหน้าสุดท้ายที่ส่วนหัวและหน้าแรกที่ส่วนท้าย ImageView iv = new ImageView(getContext()); iv.setImageResource(ids[i == 0 ? ids.length-1 : ( i > ids. ความยาว ? 0 : i-1 )]); iv.setScaleType(ImageView.ScaleType.FIT_XY); this.views.add(iv) setCurrentItem(1); // หน้าแรก this.adapter.notifyDataSetChanged(); } @Override โมฆะสาธารณะ setOnPageChangeListener (ผู้ฟัง OnPageChangeListener) { this.listener2 = ผู้ฟัง;