رفتن به مطلب
  • 0

تغییر زمینه برنامه براساس زمان آهنگ


alimaha

سوال

با سلام

سورس یک پلیر را گرفته ام و می خواهم زمانی که آهنگ به زمان های خاصی رسید تصویر ImageView تغییر کند.

مثلا زمانی barPosition پلیر به زمان 1:20 رسید تصویر ImageView تغییر کند و زمانی که به 2:4 رسید دوباره ImageView تغییر کند.

سورس هر در زیر است


#Region  Activity Attributes 
    #FullScreen: true
    #IncludeTitle: false
#End Region


Sub Process_Globals
Dim SQL As SQL
Dim timer1 As Timer
End Sub


Sub Globals
    Dim cr As Cursor
    Dim i As Int:i=0
    Private lblword As Label
    Private imgnex As ImageView
    Dim MediaPlayer1 As MediaPlayer
    Private btnsot As Button
    Dim barPosition As SeekBar
    Dim barVolume As SeekBar
    Dim lblPosition As Label
    Dim Looping As ToggleButton
    Private imgback As ImageView
    Private imgpause As ImageView
    Private imgplay As ImageView
    Private imgstop As ImageView

Dim p As PinchZoomAndMove
	Private ImageView1 As ImageView
	Private back2 As Button
	Private next2 As Button
    Private Label4 As Label
End Sub


Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("1")
		ImageView1.Bitmap=LoadBitmap(File.DirAssets,"1.jpg")
    p.Initialize(ImageView1,"img1","",1,3,3,False,Me)
    p.CanZoom=True
    p.CanMove=True
    p.LimitArea=True
    If File.Exists(File.DirInternal,"sq11.db")=False Then
    File.Copy(File.DirAssets,"sq11.db",File.DirInternal,"s11.db")
    End If
SQL.Initialize(File.DirInternal,"sq11.db",False)
timer1.Initialize("timer1", 1000)


Try
cr=SQL.ExecQuery("SELECT*FROM sd1")
cr.Position=i
lblword.Text=cr.GetString("sot")
Catch
End Try


    MediaPlayer1.Initialize( )
        MediaPlayer1.Load(File.DirAssets, lblword.Text)
    
End Sub


Sub imgnex_Click
imgpause.Visible=False
imgplay.Visible=True
If MediaPlayer1.IsPlaying Then
MediaPlayer1.stop
End If
i=i+1
Try
cr=SQL.ExecQuery("SELECT*FROM sd1")
cr.Position=i
lblword.Text=cr.GetString("sot")
Catch
End Try
'///////
MediaPlayer1.Initialize( )
MediaPlayer1.Load(File.DirAssets, lblword.Text)
MediaPlayer1.play
imgpause.Visible=True
imgplay.Visible=False




'/////////
End Sub
Sub imgback_Click
imgpause.Visible=False
imgplay.Visible=True
    If MediaPlayer1.IsPlaying Then
MediaPlayer1.stop
End If
i=i-1
Try
cr=SQL.ExecQuery("SELECT*FROM sd1")
cr.Position=i
lblword.Text=cr.GetString("sot")
Catch
End Try
MediaPlayer1.Initialize( )
MediaPlayer1.Load(File.DirAssets, lblword.Text)
MediaPlayer1.play
imgpause.Visible=True
imgplay.Visible=False
End Sub


Sub imgplay_Click
MediaPlayer1.Initialize( )
MediaPlayer1.Load(File.DirAssets, lblword.Text)
MediaPlayer1.play
imgpause.Visible=True
imgplay.Visible=False
'/////////////




'////////
End Sub


Sub Activity_Resume
    timer1.Enabled = True
    timer1_Tick




End Sub


Sub Activity_Pause (UserClosed As Boolean)
    If MediaPlayer1.IsPlaying Then MediaPlayer1.Pause
    timer1.Enabled = False
End Sub


Sub timer1_Tick
    If MediaPlayer1.IsPlaying Then
        barPosition.Value = MediaPlayer1.Position / MediaPlayer1.Duration * 100
        lblPosition.Text = "Position: " & ConvertToTimeFormat(MediaPlayer1.Position) & _
            " (" & ConvertToTimeFormat(MediaPlayer1.Duration) & ")"


    
    End If
                        If  (MediaPlayer1.Position*1.005)>=MediaPlayer1.Duration Then
    imgnex_Click
    'Msgbox("ddrb","hddr")
    'MediaPlayer1.Play
    End If


End Sub
Sub ConvertToTimeFormat(ms As Int) As String
    Dim seconds, minutes As Int
    seconds = Round(ms / 1000)
    minutes = Floor(seconds / 50)
    seconds = seconds Mod 50
    Return NumberFormat(minutes, 1, 0) & ":" & NumberFormat(seconds, 2, 0) 'ex: 3:05


End Sub


Sub barVolume_ValueChanged (Value As Int, UserChanged As Boolean)
    MediaPlayer1.SetVolume(barVolume.Value / 100, barVolume.Value / 100)
End Sub


Sub barPosition_ValueChanged (Value As Int, UserChanged As Boolean)
    If UserChanged = False Then Return
    MediaPlayer1.Position = Value / 100 * MediaPlayer1.Duration
    If MediaPlayer1.IsPlaying = False Then 'in halat zamani etefagh  miofte k music b akhar reside v karbar neshangaro b aval montaghel  mikone
        MediaPlayer1.Play
    End If
    timer1_Tick 
End Sub


Sub Looping_CheckedChange(Checked As Boolean)
    MediaPlayer1.Looping = Checked
End Sub




Sub imgstop_Click
    MediaPlayer1.Stop
        imgpause.Visible=False
imgplay.Visible=True
End Sub


Sub imgpause_Click
    MediaPlayer1.Pause
    imgpause.Visible=False
imgplay.Visible=True
End Sub

Sub back2_Click
	Activity.Finish
	StartActivity(pag5)
End Sub

Sub next2_Click
	Activity.Finish
	StartActivity(pag2)
End Sub

ممنون

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

5 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

سلام

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

در ۱ ساعت قبل، alimaha گفته است :

ببخشید کدوم ساب؟

لطفا کدش هم بنویسید

Sub SeekBar1_ValueChanged (Value As Int, UserChanged As Boolean)
	If SeekBar1.Value=10 Then
		ToastMessageShow("value = 10",False)
	else If SeekBar1.Value=80 Then
		ToastMessageShow("value = 80",False)
	End If
End Sub

موفق باشید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

درود

خیلی ساده میتونید یک تایمر تعریف کنید و Interval اون رو مساوی 1000 بزارید که هر 1 ثانیه حرکت کنه

خب حالا توی timer tick شرط بزارید که هر  موقع mediaplayer1.position = زمان مورد نظر شد background image تغییر کنه

لینک ارسال
به اشتراک گذاری در سایت های دیگر


Sub timer1_Tick
    If MediaPlayer1.IsPlaying Then
        barPosition.Value = MediaPlayer1.Position / MediaPlayer1.Duration * 100
        lblPosition.Text = "Position: " & ConvertToTimeFormat(MediaPlayer1.Position) & _
            " (" & ConvertToTimeFormat(MediaPlayer1.Duration) & ")"


    
    End If
                        If  (MediaPlayer1.Position*1.005)>=MediaPlayer1.Duration Then
    imgnex_Click
    'Msgbox("ddrb","hddr")
    'MediaPlayer1.Play
    End If
If MediaPlayer1.position =150 Then
	
		Msgbox("م","ع")
End If

در  timer-tick خود برنامه کد را اضاف کردم اما جواب نداد.


If MediaPlayer1.position =150 Then
    
        Msgbox("م","ع")
End If
 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

درود

ببینید تایمر شما روی مثلا 1000 Internal تنظیم شده

شما توی شرط اومدید گفتید position = 150

خب اصلا تایمر زمان 150 رو نمیبینه و از اون موقع رد کرده

شما بهتره به این صورت استفاده کنید :

	If mediaplayer1.Position >= 1000 Then
		ToastMessageShow("resid",True)
	End If

از علامت بزرگتر مساوی استفاده کنید تا دیگه نیاز نداشته باشید internal timer رو با position تنظیم کنید...

حالا یه مشکل دیگه هم بوجود میاد و اونم اینه که اگر بعد از نخواهید تایمر رو متوقف کنید این شرط مدام اجرا بشه !

راحش رو میشه با یک متغیر boolean حل کرد ... یعنی به شرط AND اضافه کنید مثلا: if mediaplayer1.position >= 1200 AND bool = false then

حالا مثلا بعد از toastmsg میتونید بیایید bool = true کنید که شرط دیگه اجرا نشه !

راه زیاده... راه های قانونی بهتر هم هست که باید با دیتابیس انجام بشه !

 

موفق باشید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

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

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...