PDA

View Full Version : طریقه ساخت منو



gilas1368
سه شنبه 20 آبان 1393, 07:50 صبح
سلام به همگی

من میخام برای برنامه ام ی منویی مثه عکس زیر داشته باشم ک وقتی کاربر روی هر کدوم از شکل های بالا ضربه زد
اون باتن ب آهستگی بچرخه و روبروی اون شکل قرار بگیره و چراغ زیر اون شکلت هم روشن بشه

125512

حالا من دوتا سوال دارم:

1- این منو رو چطوری میتونم طراحی، پیاده سازی و اجراش کنم؟
2- چور میتونم ب اون button زیر حالت ولوم بدم ک بتونه بچرخه و روبروی آیکونی ک کاربر انتخاب کرده قرار بگیره؟



با تشکر

bia2joker
سه شنبه 20 آبان 1393, 20:22 عصر
با سلام
طرح خیلی قشنگی هست ولی خیلی ساده پیاده سازی میشه
الان خودم وقت ندارم پیاده سازی کنم
ولی اگه بخوام انجامش بدم 5 تا عکس که هر بار فقط یکی روشن(آبی) هست رو طراحی می کنم (بدون اون دایره وسطی بزرگه!)
بعدش به عکس اون دایره angel می دم (که زاویه رو درجه به درجه زیاد یا کم می کنم یه delay هم به ازای هر Increment هم قرار می دهم)
اینم کد تغییر زاویه عکس
البته نمی دونم این کار بهینه هست یا نه

Bitmap myImg = BitmapFactory.decodeResource(getResources(), R.drawable.image);

Matrix matrix = new Matrix();
matrix.postRotate(30);

Bitmap rotated = Bitmap.createBitmap(myImg, 0, 0, myImg.getWidth(), myImg.getHeight(),
matrix, true);

gilas1368
سه شنبه 20 آبان 1393, 20:54 عصر
با سلام
طرح خیلی قشنگی هست ولی خیلی ساده پیاده سازی میشه
الان خودم وقت ندارم پیاده سازی کنم
ولی اگه بخوام انجامش بدم 5 تا عکس که هر بار فقط یکی روشن(آبی) هست رو طراحی می کنم (بدون اون دایره وسطی بزرگه!)
بعدش به عکس اون دایره angel می دم (که زاویه رو درجه به درجه زیاد یا کم می کنم یه delay هم به ازای هر Increment هم قرار می دهم)
اینم کد تغییر زاویه عکس
البته نمی دونم این کار بهینه هست یا نه

Bitmap myImg = BitmapFactory.decodeResource(getResources(), R.drawable.image);

Matrix matrix = new Matrix();
matrix.postRotate(30);

Bitmap rotated = Bitmap.createBitmap(myImg, 0, 0, myImg.getWidth(), myImg.getHeight(),
matrix, true);


توضیحتون عالی بود
فقط ی سوال
اگ بخام حرکت اون button وسطی با انیمیشن باشه(وقتی کاربر آیکونی رو انتخاب کرد، اون button با ی حرکت آهسته ب سمت اون آیکون بچرخه) باچیکا کنم؟

bia2joker
چهارشنبه 21 آبان 1393, 17:03 عصر
برای اینکه دایره با حرکت آهسته بچرخه باید زاویه رو درجه به درجه زیاد و یا کم کنی بعد یک delay قرار بدی! (فکر می کردم به همین راحتی ولی 2 ساعت از وقتمو گرفت!)




اولین مشکل این هست که تو ترد UI نمی تونی از delay استفاده کنی به خاطر همین باید یه thread جانبی تعریف کنی
مثلا اگه قراره یه دکمه کلیک شد بعد این دایره بچرخه باید تو متد onclicklistlistener یه ترد تعریف کنی به صورت مقابل









Thread timer = new Thread() {
public void run(){
try {
while(posAngel <= TargetAngel){//PosAngel Zaviyeye feliye dayere hast va Target Angel ham a esmesh moshakhass
// inja bayad code taghir javiye ro benevisi yani
posAngel++;

sleep(100);// be mili saniye hast
}
} catch (InterruptedException e) {
e.printStackTrace();
}




}
};















اونجایی که گفتم باید کد تغییر زاویه رو بزاری اگه اون کد قبلی رو کپی پست کنی وقتی برنامه ران بشه سریع close می ده و میاد بیرون
چرا؟
به خاطر اینکه تو ترد واسطه داری UI رو تغییر می دی
برای حل این مشکل

توی Oncreate یک هندلر واسطه به صورت زیر تعریف می کنی
final Handler handler = new Handler();

بعدا اونجایی که گفتم باید زاویه رو تغییر بدی باید از این کد استفاده کنی

handler.post(new Runnable(){


public void run(){
//Update your view here

Matrix matrix = new Matrix();

img.setScaleType(ScaleType.MATRIX); //required
matrix.postRotate((float) pos, img.getDrawable().getBounds().width()/2, img.getDrawable().getBounds().height()/2);
img.setImageMatrix(matrix);

}
});