Перекос текстового представления в Android

Я хочу повторить следующее в моем приложении:

Введите описание изображения здесь

Как вы можете видеть, это в основном кнопка, которая увеличивает / уменьшает значение текстового представления, содержащегося в нем. Эта кнопка будет иметь три визуальных состояния -> не нажата, уменьшена и увеличена (как видно на изображении выше, пользователь нажимает стрелки увеличения, и кнопка появляется нажатой на этой стороне)

Вот мои 3 кнопки:

Введите описание изображения здесьВведите описание изображения здесьВведите описание изображения здесь

Как вы можете видеть, проблема заключается в том, что я могу правильно перекосить / поворачивать текстовое представление, чтобы оно выглядело визуально правильным и казалось наклонным вместе с кнопкой, когда оно увеличивалось или уменьшалось.

Я пробовал два разных подхода:

  • Создайте класс пользовательского текстового вида, который переопределяет метод onDraw() для искажения холста:

     @Override public void onDraw(Canvas canvas) { canvas.save(); canvas.skew(0.2f, 0f); super.onDraw(canvas); canvas.restore(); } 
  • Интегрируйте класс Rotate3dAnimation (источник здесь ) и используйте множество различных вариантов, чтобы получить желаемый результат, например:

      Rotate3dAnimation skew = new Rotate3dAnimation( 30, 0, centerX, centerY, 0, false); txtAmount.startAnimation(skew); 

К сожалению, я не совсем получаю точный результат, который отражает первое изображение выше. Меня путают с установкой значений с осью Z, перекосом, вращением и т. Д.

Я бы очень признателен за любую помощь от любого, кто имеет опыт работы с этим материалом. заранее спасибо

Solutions Collecting From Web of "Перекос текстового представления в Android"

Ну, я даже попытался, и я придумал что-то вроде этого:

  public class DemoActivity extends TextView { Context context; String firstText = "$120.00"; public DemoActivity(Context context) { super(context); this.context = context; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); setText(firstText); setTextSize(30); canvas.skew(1.0f, 0.3f); //you need to change values over here Rotate3dAnimation skew = new Rotate3dAnimation( -20, 30,200, 200, 0, false); //here too startAnimation(skew); } } 

Я получил результат как:

Введите описание изображения здесь

Я предполагаю, что изменение значений методом проб и ошибок может решить вашу проблему. Надеюсь, поможет.

Спасибо Парту Доши. Его ответ нуждается в небольшой настройке для запуска, которую я делюсь здесь, чтобы спасти кого-то еще.

Сначала создайте класс в папке src и напишите все три конструктора.

 public class TextViewDemo extends TextView { Context context; String text = "TESTING 3DX TOOLS"; public TextViewDemo(Context context) { super(context); this.context = context; } public TextViewDemo(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; } public TextViewDemo(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); this.context = context; } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); setText(text); setTextSize(30); canvas.skew(0.5f, 1.0f); // you need to change values over here Rotate3dAnimation skew = new Rotate3dAnimation(-50, 30, 0, 0, 0, false); // here too startAnimation(skew); } 

}

В файле res / layout / my_layout.xml вы можете добавить тег своего пользовательского TextView.

 <com.yourpackage.name.TextViewDemo android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="Hello World" <!-- All parameters and value shall remain same --> /> 

Как и любое другое представление, вы можете создать экземпляр TextViewDemo в методе onCreate ()

 TextViewDemo txtDemo = (TextViewDemo) findViewById(R.id.name); 

С уважением