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

نمایش متن حرکتی


MR.B4A

سوال

سلام.

من یه متن طولانی دارم که میخوام به صورت singleLine در لیبل نمایشش بدم و این لیبل مثل یک زیرنویس از سمت راست بیاد و بره سمت چپ و از کادر خارج بشه و دوباره از سمت راست شروع بشه و...

اما نمیدونم چرا اولا متنم به صورت ناقص توی لیبل نمایش داده میشه و وقتی SingleLine=True هست.

دوما نمیدونم چهطوری کاری کنم که متن از سمت راست حرکت کنه و به سمت چپ بره و از کادر خارج بشه و دوباره از سمت راست شروع به اومدن داخله متن کنه.

ممنون میشم راهنماییم کنید

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

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

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

سلام

کتابخونه های JavaObject و StringUtils رو تیک بزنید و سپس این تابع رو اضافه کنید:

Sub FitAndMarquee(lbl As Label)
	Dim dt As Float
	Dim limit = 0.5 As Float
	Dim h As Int
	Dim stu As StringUtils
	lbl.TextSize = 72
	dt = lbl.TextSize
	h = stu.MeasureMultilineTextHeight(lbl, lbl)
	Do While dt > limit Or h > lbl.Height
		dt = dt / 2
		h = stu.MeasureMultilineTextHeight(lbl, lbl)
		If h > lbl.Height Then
			lbl.TextSize = lbl.TextSize - dt
		Else
			lbl.TextSize = lbl.TextSize + dt
		End If
	Loop
	lbl.SingleLine = True
	lbl.Ellipsize = "MARQUEE"
	Sleep(10)
	Dim jo As JavaObject = lbl
	jo.RunMethod("setSelected", Array(True))
End Sub

سپس به این شکل استفاده کنید:

	Dim lbl As Label
	lbl.Initialize("lbl")
	lbl.Text="B4X is a suite of rapid application development IDEs and proprietary programming language that allows the creation of applications on the following platforms: Google Android, Apple iOS, Java, Raspberry Pi and Arduino. Although the B4X syntax is very similar to BASIC, it is an entirely new language."
	lbl.TextColor=Colors.Black
	lbl.Gravity=Gravity.CENTER_VERTICAL
	Activity.AddView(lbl,0%x,90%y,100%x,10%y)
	
	FitAndMarquee(lbl)

اگه متن لیبل انگلیسی باشه متن از راست به چپ و اگه فارسی باشه از چپ به راست حرکت خواهد کرد.

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

دمت گرم دوست عزیز خیلی عالی بود

فقط سرعت حرکت کردنشو چه شکلی میشه تنظیم کرد؟

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

برای تنظیم سرعت باید از Scroller استفاده کرد.

ابتدا این کدهای جاوا رو بین دو ساب دیگه قرار بدین:

#If JAVA

import android.graphics.Rect;
import android.text.TextPaint;
import android.view.animation.LinearInterpolator;
import android.widget.Scroller;
import android.widget.TextView;
import anywheresoftware.b4a.objects.LabelWrapper;

public class ScrollTextView {
    private Scroller mSlr;
    private int mRndDuration=10000;
    private int mXPaused = 0;
    private boolean mPaused = true;
    private TextView mtv;
    
    
    public void initialize(LabelWrapper textview) {
    	mtv=textview.getObject();
    	mtv.setSingleLine();
    	mtv.setEllipsize(null);
    	mtv.setVisibility(mtv.INVISIBLE);
    }
    
    public void startScroll() {
        mXPaused = -1 * mtv.getWidth();
        mPaused = true;
        resumeScroll();
    }
    
    public void resumeScroll() {

        if (!mPaused) return;
		
        mtv.setHorizontallyScrolling(true);

        mSlr = new Scroller(this.mtv.getContext(), new LinearInterpolator());
        mtv.setScroller(mSlr);

        int scrollingLen = calculateScrollingLen();
        int distance = scrollingLen - (mtv.getWidth() + mXPaused);
        int duration = (new Double(mRndDuration * distance * 1.00000
        / scrollingLen)).intValue();

        mtv.setVisibility(mtv.VISIBLE);
        mSlr.startScroll(mXPaused, 0, distance, 0, duration);
        mtv.invalidate();
        mPaused = false;
    }
    
    private int calculateScrollingLen() {
        TextPaint tp = mtv.getPaint();
        Rect rect = new Rect();
        String strTxt = mtv.getText().toString();
        tp.getTextBounds(strTxt, 0, strTxt.length(), rect);
        int scrollingLen = rect.width() + mtv.getWidth();
        rect = null;
        return scrollingLen;
    }
	
	public void setRndDuration(int duration) {
		this.mRndDuration = duration;
    }
}

#End If

کتابخونه JavaObject رو فعال کنین و به این شکل استفاده کنین:

	Dim lbl As Label
	lbl.Initialize("lbl")
	lbl.Text="B4X is a suite of rapid application development IDEs and proprietary programming language that allows the creation of applications on the following platforms: Google Android, Apple iOS, Java, Raspberry Pi and Arduino. Although the B4X syntax is very similar to BASIC, it is an entirely new language."
	lbl.TextColor=Colors.Black
	lbl.Gravity=Gravity.CENTER_VERTICAL
	Activity.AddView(lbl,0%x,90%y,100%x,10%y)
	
	Dim jo As JavaObject
	jo.InitializeNewInstance("b4a.example.main.ScrollTextView", Array(Null))
	jo.RunMethod("initialize",Array As Label(lbl))
	jo.RunMethod("setRndDuration",Array(10000))
	jo.RunMethod("startScroll",Null)

در jo.RunMethod("setRndDuration",Array(10000)) به جای 10000 مدت زمان مورد نظر خودتون رو به صورت میلی ثانیه وارد کنین. مثلا اینجا 10000 به این معنی هست که حرکت متن در بازه 10 ثانیه ای انجام بشه. هرچقدر مدت زمان بیشتر باشه سرعت کمتر خواهد بود و بلعکس.

این روش فقط برای متون انگلیسی جواب میده.

درضمن حرکت متن فقط یکبار انجام میشه و برای تکرار حرکت باید از تایمر استفاده کنین و interval اونو برابر با مدت زمان حرکت یا یه خورده بیشتر قرار بدین و در رویداد Tick تایمر، متد startScroll رو دوباره صدا بزنین.

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

بایگانی شده

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

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

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