کلیدستان

نسخه‌ی کامل: انیمیشن چرخش برای ایتم های یک گرید ویو چگونه؟ (اندروید)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام دوستان
شرمنده بازم مزاحم میشم

میخواستم برای آیتم های گرید ویوم یک انیمیشن چرخش بزارم به صورتی که وقتی روش کلیک شد (انتخاب شد) باتنم دور خودش بچرخه

ممنون میشم یک توضیح کلی بدید که باید چیکار کنم
سلام
به این لینک  نگاهی بی اندازید

http://www.kelidestan.com/keys/keys.php?key=2312
 
همچنین برای اینکار ابتدا در فایل XML یک دکمه (Button ) و یک SeekBar درست کنید . سپس بعد از تعریف این دو شئ باید setOnSeekBarChangeListener تعریف کنید که با تغییر  Seek Bar  دکمه چرخش داشته باشد

کد پی‌اچ‌پی:
public class MainActivity extends Activity {
Button  Rotate;
@
Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
  
Rotate = (ButtonfindViewById(R.id.button1);
SeekBar SK = (SeekBarfindViewById(R.id.seekBar1);
SK.setMax(360);
SK.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@
Override
public void onStopTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub
}
@
Override
public void onStartTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub
}
@
Override
public void onProgressChanged(SeekBar arg0int arg1boolean arg2) {
Rotate.setRotation((float)arg1);
}
});


که این کد میگه که بعد از انخاب باتن 360 درجه می چرخه

کد پی‌اچ‌پی:
SK.setMax(360); 
 
یک دنیا ممنون
همون کلید شماره 2312 رو که گفتید رو تغیرش دادم و فقط یه باتن تو لایوتش موند. اینم اکتیویتیش:

کد پی‌اچ‌پی:
public class MainActivity extends Activity {
    private 
Button myimage;
    
    
   @
Override
   
protected void onCreate(Bundle savedInstanceState) {
      
super.onCreate(savedInstanceState);
      
setContentView(R.layout.activity_main);
      
   
      
      
myimage = (ButtonfindViewById(R.id.rotate);
      
myimage.setOnClickListener(new OnClickListener() {
        @
Override
        
public void onClick(View v) {
            
rotateAnimation(v);
            
startActivity(new Intent(getApplication(), MoveActivity.class));

        }
      });
   }

   private 
void rotateAnimation(View view) {
       
Animation animation AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate);
       
myimage.startAnimation(animation);
   }} 

الان همه چیز درسته فقط:
1- الان چطور میتونم Intent رو به تاخیر بندازم که باتن فرصت کامل برای چرخیدن رو داشته باشه؟؟
2- چطور میتونم در گرید ویو از این کد ها برای چرخش آیتم هام استفاده کنم؟
 
دوست عزیز برای تاخییر انداختن. کافیه بعد از rotateAnimation  از دستور مکث کردن زیر استفاده کنید.

کد پی‌اچ‌پی:
Thread.sleep(2000); 

با این دستور ،برنامه سعی میکند 2 ثانیه اگر توانست مکث کند و بعد خط بعد اجرا میشود.این خط باید درtry نوشته شود..کافیه خط بالا رو بنویسید بعد خوده اکلیپس به شما میگوید باید این دستور در try _catchقرار بگیره..
درمورده سوال دومتون هم..شما از این انیمیشن میتونید روی view های مختلف  استفاده کنید..
کافیه متد بالا رو توی دست itemClicklisiner   گرید ویو خودتون قرار بدید..یعنی زمانی که آیتم گرید ویو کلیک شد .این انیمیشن اجرا بشود
(۱۳۹۳/۱۲/۲۵, ۰۷:۰۱ ب.ظ)'داش بهروز' نوشته: [ -> ]دوست عزیز برای تاخییر انداختن. کافیه بعد از rotateAnimation  از دستور مکث کردن زیر استفاده کنید.
کد پی‌اچ‌پی:
Thread.sleep(2000); 
با این دستور ،برنامه سعی میکند 2 ثانیه اگر توانست مکث کند و بعد خط بعد اجرا میشود.این خط باید درtry نوشته شود..کافیه خط بالا رو بنویسید بعد خوده اکلیپس به شما میگوید باید این دستور در try _catchقرار بگیره..
درمورده سوال دومتون هم..شما از این انیمیشن میتونید روی view های مختلف  استفاده کنید..
کافیه متد بالا رو توی دست itemClicklisiner   گرید ویو خودتون قرار بدید..یعنی زمانی که آیتم گرید ویو کلیک شد .این انیمیشن اجرا بشود
 

منظورتون به این صورته دیگه آره؟

کد پی‌اچ‌پی:
myimage = (ButtonfindViewById(R.id.rotate);
      
myimage.setOnClickListener(new OnClickListener() {
        @
Override
        
public void onClick(View v) {
            
rotateAnimation(v);
            try {
                
Thread.sleep(2000);
            } catch (
InterruptedException e) {
                
// TODO Auto-generated catch block
                
e.printStackTrace();
            }
            
startActivity(new Intent(getApplication(), MoveActivity.class));
        }
      });
   } 

ولی نشد!!
یعنی دکمه رو که انتخاب میکنم تا دو ثانیه هیچ اتفاقی نمیفته بعدش هم انیمیشن هم intent با هم اجرا میشم درواقع هیچ فرقی نکرد.
سلام.
با استفاده از کلید زیر، تعیین کنید که کد مربوط به رفتن به Activity جدید، بعد از 2 ثانیه اجرا شود :

کلید شماره 2610


 
بله شما درست میگید..بنده یه چیزی فراموش کردم اینکه برای مکث کردن برای UI باید از

کد پی‌اچ‌پی:
runOnUiThread(new Runnable() {
            @
Override
            
public void run() {
                
// Do some stuff
            
}
        }) 

یعنی یه جورایی ارتباط برقرار کنه..اگر دستور بالا رو میخوایید بنویسید باید یه thread تعریف کنید.و که برای کار شما مناسب نیست..بهتره از روشی که آدمین جان استفاده کنید...یا روش زیر که خیلی خوبه و مناسب برای این نوع کار شما...

کد پی‌اچ‌پی:
myimage.setOnClickListener(new OnClickListener() {
        @
Override
        
public void onClick(View v) {
            
rotateAnimation(v);
            
v.postDelayed(new Runnable() { public void run() { 
                
                    
startActivity(new Intent(getApplication(), MoveActivity.class));
            } }, 
3000);
            
          
        }
      }); 

که به مدت سه ثانیه مکث میکند.و بعد از این مدت متدهای داخل Run اجرا میشود.

(۱۳۹۳/۱۲/۲۵, ۰۸:۵۲ ب.ظ)'داش بهروز' نوشته: [ -> ]بله شما درست میگید..بنده یه چیزی فراموش کردم اینکه برای مکث کردن برای UI باید ازیعنی یه جورایی ارتباط برقرار کنه..اشما...


 

 


لطفا پیام خصوصیتونو چک کنید
 
سلام
کدم رو اینطور کامل کردم:

کد پی‌اچ‌پی:
    gridView = (GridViewfindViewById(R.id.gridView1);
        
customGridAdapter = new CustomGridViewAdapter(thisR.layout.row_gridgridArray);
        
gridView.setAdapter(customGridAdapter);
        

      
gridView.setOnItemClickListener(new OnItemClickListener(){  
          @
Override
          
public void onItemClick(AdapterView<?> arg0, final View arg1, final int arg2, long arg3) {
              rotateAnimation(arg1);
              arg1.postDelayed(new Runnable() { public void run() { 
              Intent intent = new Intent();
              switch(arg2){
                    
                    case 0: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;} 
                    case 1: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;} 
                    case 2: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;} 
                    case 3: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;} 
                    case 4: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;} 
                    case 5: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;} 
                    case 6: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;} 
                    case 7: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;} 
                    case 8: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;}                  
                    case 9: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;} 
                    case 10: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;} 
                }}}, 2000);
                }
      
            });
    }
              private void rotateAnimation(View view) {
                  
                   Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate);
                   
                   view.startAnimation(animation); 
               } 
           } 

الان همه چیز درسته
فقط یه مشکل کوچیکی داره
اونم اینه که وقتی یک آیتم انتخاب میشه میچرخه و بعد دو ثانیه که میخواد وارد اکتیویتی دیگری بشه همون آیتم دباره میاد بچرخه ولی intent اجرا میشه نمیزاره که آیتم خیلی بچرخه!!!
درسته مشکل کوچیکیه ولی یکم کارو خراب میکنه.
ممنون میشم راهنمایی کنید

یه چیز دیگه:فونت متن آیتم های گرید ویو رو چطور میتونم تغیر بدم؟
دوست عزیز من سوال اول دقیق متوجه نشدم..دوثانیه مکث میکنه بعدش میره داخل اکتیوتی دیگه..خب مشکل دقیق چیه الان؟..
در مورده سوال دوم هم..مانند تغییر فونت سایر تکست ویو ها میشه واسه آیتم گرید ویو یا هرچیز دیگه ای رو تغییر بدید..
که در سایت توضیح داده شده.
(۱۳۹۳/۱۲/۲۸, ۱۰:۰۲ ق.ظ)'esmail3309' نوشته: [ -> ]سلام
کدم رو اینطور کامل کردم:

کد پی‌اچ‌پی:
    gridView = (GridViewfindViewById(R.id.gridView1);
        
customGridAdapter = new CustomGridViewAdapter(thisR.layout.row_gridgridArray);
        
gridView.setAdapter(customGridAdapter);
        

      
gridView.setOnItemClickListener(new OnItemClickListener(){  
          @
Override
          
public void onItemClick(AdapterView<?> arg0, final View arg1, final int arg2, long arg3) {
              rotateAnimation(arg1);
              arg1.postDelayed(new Runnable() { public void run() { 
              Intent intent = new Intent();
              switch(arg2){
                    
                    case 0: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;} 
                    case 1: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;} 
                    case 2: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;} 
                    case 3: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;} 
                    case 4: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;} 
                    case 5: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;} 
                    case 6: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;} 
                    case 7: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;} 
                    case 8: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;}                  
                    case 9: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;} 
                    case 10: {rotateAnimation(arg1);
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;} 
                }}}, 2000);
                }
      
            });
    }
              private void rotateAnimation(View view) {
                  
                   Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate);
                   
                   view.startAnimation(animation); 
               } 
           } 

الان همه چیز درسته
فقط یه مشکل کوچیکی داره
اونم اینه که وقتی یک آیتم انتخاب میشه میچرخه و بعد دو ثانیه که میخواد وارد اکتیویتی دیگری بشه همون آیتم دباره میاد بچرخه ولی intent اجرا میشه نمیزاره که آیتم خیلی بچرخه!!!
درسته مشکل کوچیکیه ولی یکم کارو خراب میکنه.
ممنون میشم راهنمایی کنید

یه چیز دیگه:فونت متن آیتم های گرید ویو رو چطور میتونم تغیر بدم؟

 

روش rotateAnimation را دو بار نوشته اید، یک بار اینجا :

کد پی‌اچ‌پی:
public void onItemClick(AdapterView<?> arg0, final View arg1, final int arg2, long arg3) {
    rotateAnimation(arg1); 

و بار دوم، در خود case ها، مثلا :

کد پی‌اچ‌پی:
case 0: {rotateAnimation(arg1); 

بنابراین باید یکی از آن دو را حذف کنید (اگر قرار است کدها برای case های مختلف، تفاوتی نداشته باشند، کد موجود در case ها را حذف کنید).

--------------------------------------------------

در مورد، تغییر فونت item های GridView ، باید فایل xml مرتبط با تعریف ساختار گرافیکی item ها را یافته و برای TextView های موجود در آن، فونت را مطابق کلید زیر تعیین کنید :

کلید شماره 834

یا اگر فایل xml برای item ها تعیین نشده، باید کدهای java مربوط به ساخت item ها را یافته و کد تغییر فونت را در بین آنها بنویسید.

لطفا سایر سوالات غیر مرتبط با این موضوع را با ساخت موضوع جدید مطرح کنید. 
(۱۳۹۳/۱۲/۲۹, ۰۱:۵۲ ق.ظ)'admin' نوشته: [ -> ]روش rotateAnimation را دو بار نوشته اید، یک بار اینجا :

کد پی‌اچ‌پی:
public void onItemClick(AdapterView<?> arg0, final View arg1, final int arg2, long arg3) {
    rotateAnimation(arg1); 

و بار دوم، در خود case ها، مثلا :

کد پی‌اچ‌پی:
case 0: {rotateAnimation(arg1); 

بنابراین باید یکی از آن دو را حذف کنید (اگر قرار است کدها برای case های مختلف، تفاوتی نداشته باشند، کد موجود در case ها را حذف کنید).

--------------------------------------------------

در مورد، تغییر فونت item های GridView ، باید فایل xml مرتبط با تعریف ساختار گرافیکی item ها را یافته و برای TextView های موجود در آن، فونت را مطابق کلید زیر تعیین کنید :

کلید شماره 834

یا اگر فایل xml برای item ها تعیین نشده، باید کدهای java مربوط به ساخت item ها را یافته و کد تغییر فونت را در بین آنها بنویسید.

لطفا سایر سوالات غیر مرتبط با این موضوع را با ساخت موضوع جدید مطرح کنید. 

 


ممنون از پاسخ کاملتون
فقط یه مشکل دیگه و آخرین مشکل

الان وقتی یک آیتم رو انتخاب میکنم کل آیتم میچرخه یعنی تکست ویو و عکس آیتم با هم میچرخن.
میخوام با انتخاب آیتم ها فقط عکس آیتم بچرخه و متنش ثابت بمونه.
اینم کد کامل :
کد پی‌اچ‌پی:
        //set grid view item
        
Bitmap q BitmapFactory.decodeResource(this.getResources(), R.drawable.test);
        
Bitmap w BitmapFactory.decodeResource(this.getResources(), R.drawable.test);
        
Bitmap e BitmapFactory.decodeResource(this.getResources(), R.drawable.test);
        
Bitmap r BitmapFactory.decodeResource(this.getResources(), R.drawable.test);
        
Bitmap t BitmapFactory.decodeResource(this.getResources(), R.drawable.test);
        
Bitmap y BitmapFactory.decodeResource(this.getResources(), R.drawable.test);
        
Bitmap u BitmapFactory.decodeResource(this.getResources(), R.drawable.test);
        
Bitmap i BitmapFactory.decodeResource(this.getResources(), R.drawable.test);
        
Bitmap o BitmapFactory.decodeResource(this.getResources(), R.drawable.test);
        
Bitmap p BitmapFactory.decodeResource(this.getResources(), R.drawable.test);
        

        
        
gridArray.add(new Item(q,"   test"));
        
gridArray.add(new Item(w,"     test "));
        
gridArray.add(new Item(e,"   test "));
        
gridArray.add(new Item(r," test "));
        
gridArray.add(new Item(t," test"));
        
gridArray.add(new Item(y,"test "));
        
gridArray.add(new Item(u," test"));
        
gridArray.add(new Item(i,"test "));
        
gridArray.add(new Item(o,"test "));
        
gridArray.add(new Item(p,"test "));

        
        
        
        
        
gridView = (GridViewfindViewById(R.id.gridView1);
        
customGridAdapter = new CustomGridViewAdapter(thisR.layout.row_gridgridArray);
        
gridView.setAdapter(customGridAdapter);
        

      
gridView.setOnItemClickListener(new OnItemClickListener(){  
          @
Override
          
public void onItemClick(AdapterView<?> arg0, final View arg1, final int arg2, long arg3) {
              rotateAnimation(arg1);
              arg1.postDelayed(new Runnable() { public void run() { 
              Intent intent = new Intent();
              switch(arg2){
                    
                    case 0: 
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break; 
                    case 1: 
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break; 
                    case 2:
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break; 
                    case 3: 
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break; 
                    case 4: 
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break; 
                    case 5: 
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;
                    case 6:
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break; 
                    case 7: 
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;
                    case 8: 
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;                
                    case 9: 
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;
                    case 10:
                    intent.setClass(arg1.getContext(), qqqqqq.class   );  startActivity(intent); break;
                }}}, 2000);
                }
      
            });
    }
              private void rotateAnimation(View view) {
                  
                   Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate);
                   
                   view.startAnimation(animation); 
               } 
           } 




 
منتظر راهنماییتون هستم
دوست عزیز شما برای اینکار باید انیمیشن روی ویو Imag،تنظیم کنید،شما کافیه بدونید انیمیشن روی هر View میشه به کاربرد.پس بهتره خودتون تلاش کنید تا نحوه ی استفاده  از انیمیشن یاد بگیرید
من یکم رو اکتیویتی adapter کار کردم ولی نشد!!

میشه یکم بیشتر توضیح بدید؟

من این پروژه رو فقط بره رفع تکلیف لازم دارم بره همین نمیخوام برم دنبال یاد گیریش فعلا.