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

  • AmeriiK_HD

    AmeriiK_HD

    16 AĞUSTOS 2012
  • DJAndrewRyan

    DJAndrewRyan

    22 Ocak 2007
  • eHow

    eHow

    27 NİSAN 2006