PDA

View Full Version : کلاسی مشتق از view



biodread
شنبه 21 اردیبهشت 1392, 09:01 صبح
سلام
دوستان همانطور که میدونید تمامی اجزایی که یه صورت ویژوال هست از کلاس view اکستند شده
طبق همین موضوع من اومدم کلاس از نوع view ساختم که داخل خودش یک rectf میکشه
و اونو در layout xml میام اضافه میکنم اما برنامه FC میده
علت از چی میتونه باشه؟

Modernidea
شنبه 21 اردیبهشت 1392, 11:23 صبح
سلام

من نمیدونم rectf چی هست؟!

ولی به نظرم کدتون را اینجا قرار بدید سریع تر به جواب میرسید.

موفق باشید.

biodread
شنبه 21 اردیبهشت 1392, 17:42 عصر
همون کلاس rect هست فکر کنم چون من از API 17 استفاده میکنم اضافه شده
package com.asdeveloper.tiling;

import java.util.Random;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class BioTilingView extends View
{
private Paint paint = new Paint();
private int[] colorArray = {Color.BLUE , Color.CYAN , Color.GREEN , Color.RED};
private Random randome = new Random();


public BioTilingView(Context context)
{
super(context);
// TODO Auto-generated constructor stub
}



@Override
protected void onDraw(Canvas canvas)
{
// TODO Auto-generated method stub
super.onDraw(canvas);

paint.setColor(colorArray[randome.nextInt(colorArray.length-1)]);
paint.setStyle(Paint.Style.FILL);



canvas.drawRect(MainActivity.STATIC.bioMusaicMaker .musaics[0], paint);


invalidate();
}

}



و این هم layout که ازش استفاده میکنم

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >


<com.asdeveloper.tiling.BioTilingView />

</LinearLayout>

mahdi1373
دوشنبه 23 اردیبهشت 1392, 20:58 عصر
لطفا نوع ارور رو هم اضافه کنید، از logcat.
من تو کد ها به مشکلی برنخوردم، غیر از اینکه باید layout_width و layout_height و هم توی فایل xml مقدار دهی کنید.

biodread
سه شنبه 24 اردیبهشت 1392, 07:45 صبح
لطفا نوع ارور رو هم اضافه کنید، از logcat.
من تو کد ها به مشکلی برنخوردم، غیر از اینکه باید layout_width و layout_height و هم توی فایل xml مقدار دهی کنید.

مشکل سر constractor بود - باید یه پارام دیگه که مربوط به اتریبیت میشد رو میگرفت

دوست من یه سوال :
چرا لاگ کت از اررور های که برمیگردونه نمیشه به مشکل اصلی پی برد
لاگ کت میاد از یکی از کلاس های جاوا ایراد میگیره نمیاد بگه آقا تو این فانکشن یه پارام کمه و ...
شما هم این مشگل رو دارید؟

farnaz12
سه شنبه 24 اردیبهشت 1392, 09:12 صبح
سلام با عرض خسته نباشید به شما برنامه نویسان می خواستم مطالبی درباره برنامه نویسی perl و syntax ان ارائه دهید.

Modernidea
سه شنبه 24 اردیبهشت 1392, 11:35 صبح
مشکل سر constractor بود - باید یه پارام دیگه که مربوط به اتریبیت میشد رو میگرفت

دوست من یه سوال :
چرا لاگ کت از اررور های که برمیگردونه نمیشه به مشکل اصلی پی برد
لاگ کت میاد از یکی از کلاس های جاوا ایراد میگیره نمیاد بگه آقا تو این فانکشن یه پارام کمه و ...
شما هم این مشگل رو دارید؟

سلام
منظورتون سازنده کلاس Canvas هست یا Rect؟

اگر منظور کلاس Paint است که شما اصلا پارامتری به این شئ ارسال نکردید. شما فقط صفات آن را مقدار دهی کردید، مانند: paint.setStyle(Paint.Style.FILL);
کلاس Paint، سه سازنده دارد که شما از نوع اول آن استفاده کردید:
Paint (http://developer.android.com/reference/android/graphics/Paint.html#Paint%28%29)() Create a new paint with default settings.
Paint (http://developer.android.com/reference/android/graphics/Paint.html#Paint%28int%29)(int flags) Create a new paint with the specified flags.
Paint (http://developer.android.com/reference/android/graphics/Paint.html#Paint%28android.graphics.Paint%29)(Pain t (http://developer.android.com/reference/android/graphics/Paint.html) paint) Create a new paint, initialized with the attributes in the specified paint parameter.

اما اگر منظور کلاس Canvas باشد که این کلاس دو سازنده داره که باز هم شما از نوع اول آن استفاد کردید:
Canvas (http://developer.android.com/reference/android/graphics/Canvas.html#Canvas%28%29)() Construct an empty raster canvas.
Canvas (http://developer.android.com/reference/android/graphics/Canvas.html#Canvas%28android.graphics.Bitmap%29)(B itmap (http://developer.android.com/reference/android/graphics/Bitmap.html) bitmap) Construct a canvas with the specified bitmap to draw into.


اما اگر منظور تابع عضو کلاس Canvas یعنی DrawRect باشد که این تابع دارای سه نوع مختلف برای فراخوانی دارد:

void drawRect (http://developer.android.com/reference/android/graphics/Canvas.html#drawRect%28float,%20float,%20float,%20 float,%20android.graphics.Paint%29)(float left, float top, float right, float bottom, Paint (http://developer.android.com/reference/android/graphics/Paint.html) paint) Draw the specified Rect using the specified paint.
void drawRect (http://developer.android.com/reference/android/graphics/Canvas.html#drawRect%28android.graphics.RectF,%20a ndroid.graphics.Paint%29)(RectF (http://developer.android.com/reference/android/graphics/RectF.html) rect, Paint (http://developer.android.com/reference/android/graphics/Paint.html) paint) Draw the specified Rect using the specified paint.
void drawRect (http://developer.android.com/reference/android/graphics/Canvas.html#drawRect%28android.graphics.Rect,%20an droid.graphics.Paint%29)(Rect (http://developer.android.com/reference/android/graphics/Rect.html) r, Paint (http://developer.android.com/reference/android/graphics/Paint.html) paint) Draw the specified Rect using the specified Paint.


با این اوصاف، امکان دارد شما تابعی از یک شئ را فراخوانی کنید که صفات آن را قبل از فراخوانی مقدار دهی نکرده باشید و پیغامی که داده میشود به همین خاطر به خود کلاس جاوای مربوطه اشاره کند نه نوع استفاده شما از تابع یا کلاس.

موفق باشید.

biodread
سه شنبه 24 اردیبهشت 1392, 17:15 عصر
سلام دوست من
مرسی که وقت گذاشتی

منظورتون سازنده کلاس Canvas هست یا Rect؟
هیچ کدوم - منظورم constractor کلاس خودم هست که از جنس View هست

paint.setStyle(Paint.Style.FILL);
دوست من در این کد من فقط استایل رنگ رو مشخص کردم که چطوری رو rect ها اعمال بشه

مشکل از چی بود :
public BioTilingView(Context context, AttributeSet attrs)
{
super(context, attrs);
// TODO Auto-generated constructor stub

}
من با اضافه کردن پارامتر attrs این مشکل رو برطرف کردم

ماجرا از این قرار که :
اگر شما این view خودتونو تو کلاس جاوا مستقیما با متود setContentView نمایش بدید لازم به پارام attrs نیست چون قرار نیست دیگه بهش مقداری بفرستید
اما اگر با xml اون view خودتونو نمایش بدید جاوا میاد از constractor همراه با attribute استفاده میکنه که مقادیر کاستوم شما رو به کلاستون بفرسته !

biodread
سه شنبه 24 اردیبهشت 1392, 17:18 عصر
حالا تصمیم دارم یه layout flow بنویسم
میخوام استایل windows phone 8 رو در اندروید شبیه سازی کنم
آیا تا بحال کسی این کار رو کرده؟