I want to show name list.I am using recylerview to show that.For that I've used Vertical TextView as a item view.it works properly.But the problem is when i scroll the recyclerview,the items height gets reduced
VerticalTextview class
public class VerticalTextView extends androidx.appcompat.widget.AppCompatTextView {
boolean topDown;
public boolean getTopDown(){
return topDown;
}
public void setTopDown(boolean key){
this.topDown=key;
}
public VerticalTextView(Context context, AttributeSet attrs){
super(context, attrs);
final int gravity = getGravity();
if(Gravity.isVertical(gravity) && (gravity&Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) {
setGravity((gravity&Gravity.HORIZONTAL_GRAVITY_MASK) | Gravity.TOP);
topDown = false;
}else
topDown = true;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(getMeasuredHeight(),getMeasuredWidth());
}
@Override
protected void onDraw(Canvas canvas) {
TextPaint tp =getPaint();
tp.setColor(getCurrentTextColor());
tp.drawableState=getDrawableState();
canvas.save();
if(topDown){
canvas.translate(getWidth(), 0);
canvas.rotate(90);
}else {
canvas.translate(0, getHeight());
canvas.rotate(-90);
}
canvas.translate(getCompoundPaddingLeft(), getExtendedPaddingTop());
getLayout().draw(canvas);
canvas.restore();
}
}
This is my item layout
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:sayaki="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="visible"
android:layout_marginVertical="5dp">
<VerticalTextView
android:id="@+id/tv_sub_category"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sathyan"
android:gravity="center"
android:paddingVertical="1dp"
android:maxLines="1"
android:textSize="14sp"
android:layout_marginVertical="10dp"
android:textColor="@color/black"
android:textStyle="bold"
/>
</LinearLayout>
</layout>
but while scrolling the item height gets reduced.
this is the before scrolling:
After scrolling:
you can see that last 3 items height is reduced and some c
I found the solution for my problem.I just changed my vertical TextView class like below
public class NewVerticalView extends TextView {
private Rect bounds = new Rect();
private TextPaint textPaint;
private int color;
public NewVerticalView(Context context) {
super(context);
}
public NewVerticalView(Context context, AttributeSet attrs) {
super(context, attrs);
color = getCurrentTextColor();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
textPaint = getPaint();
textPaint.getTextBounds((String) getText(), 0, getText().length(), bounds);
setMeasuredDimension((int) (bounds.height() + textPaint.descent()), bounds.width());
}
@Override
protected void onDraw(Canvas canvas) {
textPaint.setColor(color);
canvas.rotate(-90,bounds.width(),0
);
canvas.drawText((String) getText(), 0,- bounds.width() + bounds.height(), textPaint);
}
}
and added the rotation as 180 in the xml.Now my problem is solved.