SORU
11 AĞUSTOS 2009, Salı


Dikey (döndürülmüş) Android etiketi

Android dikey etiket gösteren 2 Yol istiyorum:

  1. Yatay etiket saatin aksi yönünde 90 derece yan (harfler) döndü
  2. Altında başka harf ile yatay bir etiket (mağaza işareti gibi)

Yapmak istiyorum geliştirmek için özel aletler için her iki durumda da, bir şekilde, yapabilir miyim TextView için render bu şekilde, ve ne iyi bir yol için böyle bir şey yapmak istersem, gitmek tamamen özel?

CEVAP
21 EKİM 2011, Cuma


Burada basit ve zarif dikey metin benim uygulama, TextView uzanan. Bu TextView tüm standart stil genişletilmiş TextView çünkü kullanılan olabilir anlamına gelir.

public class VerticalTextView extends TextView{
   final boolean topDown;

   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(heightMeasureSpec, widthMeasureSpec);
      setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
   }

   @Override
   protected boolean setFrame(int l, int t, int r, int b){
      return super.setFrame(l, t, l (b-t), t (r-l));
   }

   @Override
   public void draw(Canvas canvas){
      if(topDown){
         canvas.translate(getHeight(), 0);
         canvas.rotate(90);
      }else {
         canvas.translate(0, getWidth());
         canvas.rotate(-90);
      }
      canvas.clipRect(0, 0, getWidth(), getHeight(), android.graphics.Region.Op.REPLACE);
      super.draw(canvas);
   }
}

Varsayılan olarak, metin yukarıdan aşağıya doğru döndürülmüş. Eğer android ayarlarsanız:yerçekimi="alt", sonra da aşağıdan yukarıya doğru çizilir.

Teknik olarak, döndürülmüş çizim yaparken normal rotasyon olduğunu düşünmem için bir temel TextView (birkaç yerde genişlik/yükseklik takas), aptallar. İyi bir xml düzeni kullanıldığında da işe yarıyor.

DÜZENLEME: başka bir versiyonu gönderme, yukarıda animasyonlar ile sorunları var. Bu yeni sürüm daha iyi çalışıyor, ama bazı TextView özellikleri, kayan yazı ve benzeri uzmanlık gibi kaybeder.

public class VerticalTextView extends TextView{
   final boolean topDown;

   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(heightMeasureSpec, widthMeasureSpec);
      setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
   }

   @Override
   protected void onDraw(Canvas canvas){
      TextPaint textPaint = getPaint(); 
      textPaint.setColor(getCurrentTextColor());
      textPaint.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();
  }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BumbleDroid

    BumbleDroid

    18 EKİM 2010
  • PhoneArena

    PhoneArena

    7 NİSAN 2006
  • stokelycalm

    stokelycalm

    28 Aralık 2010