آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

اجرا نشدن متد onDraw در Image Slider

Hossein Kurd  12 سال پیش  11 سال پیش
0 0

کدهای من به این شکله:

ImagePagerAdapter:

package adapters;

import globals.G;

import java.util.ArrayList;

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

import com.emaarit.sarak.R;

public class ImagePagerAdapter extends PagerAdapter{

	private ArrayList<Integer> array;
	
	public ImagePagerAdapter(ArrayList<Integer> array){
		this.array = array;
	}
	
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return array.size();
	}

	@Override
	public boolean isViewFromObject(View view, Object object) {
		// TODO Auto-generated method stub
		return view.equals(object );
	}
	
	@Override
	public Object instantiateItem(ViewGroup container, int position) {
		// TODO Auto-generated method stub
		View view = G.appConfigs.lInflater.inflate(R.layout.sample, null);
		ImageView imgSlider = (ImageView) view.findViewById(R.id.img_slider_slideradapter);
		imgSlider.setImageResource(array.get(position));
		Log.i("Log", "PositionID Is: " + position);
		Log.i("Log", "array.size() Is: " + array.size());
		if(position == (array.size() - 1)){
			// Return to First
			Log.i("Log", "Last IndexPosition Is: " + position);
		}
		container.addView(view);
		return view;
	}
	
	@Override
	public void destroyItem(ViewGroup container, int position, Object object) {
		// TODO Auto-generated method stub
		container.removeView((View) object);
	}
	
}

 

PageIndicator:

 package indicator;

import helpers.UIHelper;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.ImageView;

public class PageIndicator extends ImageView{

	private Paint fillPaint, strockPaint ;
	private int count;
	private int indicatorWidth;
	private int currentPageIndex = 0;
	private float circleX = 0;
	private float circleY = 0;
	private static final int CIRCLE_RADIUS = 10;
	private static final int CIRCLE_SPACE = 15;
	private float offsetX;
	private float percent;
	
	public PageIndicator(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		initialize();
	}
	
	public PageIndicator(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
		initialize();
	}

	public PageIndicator(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		// TODO Auto-generated constructor stub
		initialize();
	}
	
	
	@Override
	protected void onDraw(Canvas canvas) {
		// TODO Auto-generated method stub
		super.onDraw(canvas);
		
		circleY = (float) (UIHelper.width * 0.0365);
		for(int i=0; i < count; i ++){
			Log.i("Log2", "Current Page: " + currentPageIndex + " i: " + i);
			Paint paint = strockPaint;
			if(i == currentPageIndex){
				paint = fillPaint;
			}
			circleX = offsetX + i * (CIRCLE_RADIUS + CIRCLE_SPACE);
			Log.i("Log", "circleY Is: " + circleY);
			canvas.drawCircle(circleX, circleY, CIRCLE_RADIUS, paint);
			canvas.drawCircle(circleX, circleY, CIRCLE_RADIUS, paint);
		}
	}

	public void setIndicatorsCount(int value){
		count = value;
		computeIndicatorWidth();
	}
	
	private void computeIndicatorWidth(){
		
		indicatorWidth =  count *  (CIRCLE_RADIUS + CIRCLE_SPACE);
		
		offsetX  = (UIHelper.width - indicatorWidth) / 2;
	}
	
	public void setCurrentPage(int value){
		currentPageIndex = value;
	}
	/*
	public void setPercent(float percent){
		this.percent = percent;
	}
	*/
	private void initialize(){
		
		fillPaint = new Paint();
		fillPaint.setStyle(Style.FILL);
		fillPaint.setColor(Color.GREEN);
		fillPaint.setAntiAlias(true);
		
		strockPaint = new Paint();
		strockPaint.setStyle(Style.STROKE);
		strockPaint.setColor(Color.GREEN);
		strockPaint.setAntiAlias(true);
	}
}

 

و در اکتیویتی:

 
	private void ImageSlider(){
		// ArrayList<StructPagerItem> pagerImages = new ArrayList<StructPagerItem>();
		// StructPagerItem pagerImage = new StructPagerItem();
		// pagerImages.add(object)
		ArrayList<Integer> pagerImages = new ArrayList<Integer>();
		
		pagerImages.add(R.drawable.slider_0);
		pagerImages.add(R.drawable.slider_1);
		pagerImages.add(R.drawable.slider_2);
		pagerImages.add(R.drawable.slider_3);
		
		// ========== Set Circle Drawing
		final PageIndicator indicator = (PageIndicator) findViewById(R.id.PageIndicator1);
		indicator.setIndicatorsCount(pagerImages.size());
		
		pager.setOnPageChangeListener(new OnPageChangeListener() {
			
			@Override
			public void onPageSelected(int index) {
				// TODO Auto-generated method stub
				indicator.setCurrentPage(index);
				Log.i("Log2", "You Are On Slide " + index);
			}
			
			@Override
			public void onPageScrolled(int startIndex, float percent, int pixel) {
				// TODO Auto-generated method stub
				// indicator.setPercent(percent);
			}
			
			@Override
			public void onPageScrollStateChanged(int arg0) {
				// TODO Auto-generated method stub
				
			}
		});
		
		ImagePagerAdapter adapter = new ImagePagerAdapter(pagerImages);
		pager.setAdapter(adapter);
		
	}
	

و خروجی لاگ کت بعداز اسلاید به آخرین تصویر:

 08-10 18:20:50.953: I/Log2(3246): Current Page: 0 i: 0
08-10 18:20:50.960: I/Log2(3246): Current Page: 0 i: 1
08-10 18:20:50.960: I/Log2(3246): Current Page: 0 i: 2
08-10 18:20:50.960: I/Log2(3246): Current Page: 0 i: 3
08-10 18:21:06.023: I/Log2(3246): You Are On Slide 1
08-10 18:21:06.476: I/Log2(3246): You Are On Slide 2
08-10 18:21:06.914: I/Log2(3246): You Are On Slide 3
08-10 18:21:10.609: I/Log2(3246): You Are On Slide 2
08-10 18:21:10.929: I/Log2(3246): You Are On Slide 1
08-10 18:21:11.281: I/Log2(3246): You Are On Slide 0

 

 

مسئله اینه که تصویر با درگ کردن عوض می شه اما Circle ها آپدیت نمی شن و onDraw فقط یک بار اجرا می شه

 

0 0
!!! (12 سال پیش)
0 0
یعنی یک نفر به این مشکل بر نخورده؟ (12 سال پیش)
0 0
یه متدی هست که استاد استفاده کرد ، شاید اونو صدا نزدین! invalidate(); (11 سال پیش)
0 0
کجا فراخوانی شده (11 سال پیش)
0 0
یادم نیست کدوم قسمت آموزشا بود ، فکر کنم تو متد onDraw (11 سال پیش)
0 0
من توی سمپل استاد این متد رو ندیدم!!! (11 سال پیش)
0 0
ببخشید :| ولی یجایی دیدم معلوم نیست کجاس! (11 سال پیش)
0 0
این مشکل منم هست؛لطفا راهنمایی کنید دوستان (11 سال پیش)
0 0
زمانی که اسلاید می زنی بعدب از دستور pager.invalidate استفاده کن (11 سال پیش)
 برای این سوال پاسخی وجود ندارد.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .