У меня возникла ситуация на странице Graph, где LinearLayout
должен отображать TextView
с поворотом на 90 градусов.
Надеюсь, мой вопрос будет ясен, если не сообщите мне.
У меня возникла ситуация на странице Graph, где LinearLayout
должен отображать TextView
с поворотом на 90 градусов.
Надеюсь, мой вопрос будет ясен, если не сообщите мне.
Самый быстрый и удобный способ - Rotate
на Animation
используйте анимацию поворота на вашем обычном TextView.
rotateAnimation.xml:
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="-90"
android:pivotX="50%"
android:duration="0"
android:fillAfter="true" />
Код Java:
TextView text = (TextView)findViewById(R.id.txtview);
text.setText("rotated text here");
RotateAnimation rotate= (RotateAnimation)AnimationUtils.loadAnimation(this,R.anim.rotateAnimation);
text.setAnimation(rotate);
Попробуйте следующее:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:rotation="-95"
android:text="2"
/>
В android для любого нового вида существует метод setRotation (float), который вы можете использовать
textview.setRotation(float);
но учтите, что этот метод добавлен в уровень API 11
поэтому, если вы хотите его поддержать, вы можете использовать этот
if (Build.VERSION.SDK_INT < 11) {
RotateAnimation animation = new RotateAnimation(oldAngel, newAngel);
animation.setDuration(100);
animation.setFillAfter(true);
watermarkText.startAnimation(animation);
} else {
watermarkText.setRotation(progress);
}
<TextView
android:id="@+id/rotated_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:alpha=".3"
android:background="@drawable/grey_capsule"
android:gravity="center"
android:textColor="@android:color/white"
android:textSize="14sp"
android:padding="4dp"
android:layout_marginLeft="-50dp"
android:rotation="-90"
android:text="Andrew Coder" />
[SOLVED] Спустя год из этого в моем списке ведер без подходящих ответов на форумах я, наконец, отсортировал это!
Трюк здесь состоит в том, чтобы жестко закодировать layout_width и layout_height TextView
больше, чем текст будет когда-либо - например. 100dp x 100dp.
Затем поместите TextView
в FrameLayout
и отключите отсечение для FrameLayout
android:clipChildren="false"
и клип, чтобы отменить для TextView android:clipToPadding="false"
:
TextView
с жестко заданной высотой и шириной
TextView
теперь будет плавать в FrameLayout
. Используйте настройки гравитации TextView
, чтобы переместить текст внутри границы.
Затем используйте параметры layout_gravity для перемещения границы внутри родительского FrameLayout
внутри него:
Вот пример правого и нижнего выравниваемого текста, повернутого на -90 градусов:
[ОБНОВЛЕНИЕ] Пример XML для просмотра кадра с повернутым текстом:
<FrameLayout
android:layout_width="@dimen/item_col_width_val"
android:layout_height="match_parent"
android:layout_weight="0.25"
android:padding="@dimen/table_header_margin">
<TextView
android:layout_width="@dimen/table_title_row_height"
android:layout_height="@dimen/table_title_row_height"
android:layout_gravity="bottom|end"
android:gravity="bottom"
android:rotation="-90"
android:text="@string/asm_col_title_in_stock"
android:textColor="@color/colorGood" />
</FrameLayout>
Если вам не нужна анимация, вы можете попробовать решение, предоставленное в аналогичном вопросе . Текст будет написан снизу вверх.
Он поддерживает все основные функции TextView:
Основная задача - переопределить методы onDraw()
и onMeasure()
на основе параметров вашего текста:
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
if (!this._text.isEmpty())
{
float textHorizontallyCenteredOriginX = this._measuredHeight / 2f;
float textHorizontallyCenteredOriginY = this._ascent;
canvas.translate(textHorizontallyCenteredOriginY, textHorizontallyCenteredOriginX);
canvas.rotate(-90);
canvas.drawText(this._text, 0, 0, this._textPaint);
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
try
{
this._textPaint.getTextBounds(this._text, 0, this._text.length(), this._textBounds);
this._tempView = new TextView(getContext());
this._tempView.setPadding(this._leftPadding, this._topPadding, this._rightPadding, this._bottomPadding);
this._tempView.setText(this._text);
this._tempView.setTextSize(TypedValue.COMPLEX_UNIT_PX, this._textSize);
this._tempView.setTypeface(this._typeface);
this._tempView.measure(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
this._measuredWidth = this._tempView.getMeasuredHeight();
this._measuredHeight = this._tempView.getMeasuredWidth();
this._ascent = this._textBounds.height() / 2 + this._measuredWidth / 2;
setMeasuredDimension(this._measuredWidth, this._measuredHeight);
}
catch (Exception e)
{
setMeasuredDimension(widthMeasureSpec, heightMeasureSpec);
Log.e(LOG_TAG, Log.getStackTraceString(e));
}
}
Пожалуйста, посмотрите Вертикальный (повернутый) ярлык в Android, чтобы увидеть полный исходный код.