بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

مشکل در ارتباط با Custom Control

مدیریت گفتگو
mohammad 9 سال پیش
آخرین تغییر: 9 سال پیش

سلام دوستان
من دوتا sdk دارم برای برنامه نویسی اندروید دارم : یکی ورژن قدیمی هست که همین سایت ارائه داده 
و یکی دیگه که خودم اپدیت کردم به sdk 25 
الان مشکل من اینجاست که سمپل آموزش Custom Control در sdk قدیمی کار میکنه
اما با ورژن جدید به من ارور  NullPointerException میده !!!!
و به این خط ایراد میگیره 
customProgress.setProgress(percent);
(این برنامه کپی سمپل آموزش اندروید میباشد)

 
public class MainActivity extends AppCompatActivity {


private CustomProgress customProgress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

customProgress = (CustomProgress)findViewById(R.id.customProgress);

Thread thread = new Thread(new Runnable() {

@Override
public void run() {
int percent = 0;
while (percent <= 100) {
try {
Thread.sleep(30);
percent++;
customProgress.setProgress(percent);
} catch (InterruptedException e) {
e.printStackTrace();
}

}
}
});
thread.start();
}
}
public class CustomProgress extends ImageView {

private Paint paint;
private Paint textPaint;

private static final int STROKE_WIDTH = 8;
private int percent = 0;

public CustomProgress(Context context) {
super(context);
init(context);
}

public CustomProgress(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}

public CustomProgress(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public CustomProgress(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(context);
}


public void setProgress(int value) {
percent = value;
postInvalidate();
}

private void init(Context context) {
paint = new Paint();
paint.setColor(Color.RED);
paint.setStrokeWidth(STROKE_WIDTH);
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL_AND_STROKE);

textPaint = new Paint();
textPaint.setColor(Color.BLACK);
textPaint.setAntiAlias(true);
textPaint.setStyle(Paint.Style.FILL_AND_STROKE);
textPaint.setTextSize(8);
textPaint.setTextAlign(Paint.Align.CENTER);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);

RectF rectF = new RectF();
rectF.left = 0 + STROKE_WIDTH;
rectF.right = getWidth() - STROKE_WIDTH;
rectF.top = 0 + STROKE_WIDTH;
rectF.bottom = getHeight() - STROKE_WIDTH;

int red = (int) ((100 - percent) * 2.5f);
int green = (int) (percent * 2.5f);
paint.setColor(Color.rgb(red, green, 0));

int sweepAngle = percent * 360 / 100;

canvas.drawArc(rectF, 0, sweepAngle, true, paint);
canvas.drawText(percent + "%", getWidth() / 2, getHeight() / 2, textPaint);
}
}

نظرات

fandroid 9 سال پیش
customProgress.setProgress رو داخل یک هندلر بذار

هنوز پاسخی ثبت نشده است


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