2012-04-09 1 views
2

В одном из моих приложений мне нужно прочитать текст из базы данных и показать его пользователю. Я думал об использовании Coverflow для этой цели. Так может кто-нибудь здесь, пожалуйста, дайте мне знать, возможно ли отображать текст, используя CoverFlow вместо изображений? Я пытаюсь создать вывод, который похож на this. Как было предложено, я конвертирую текст в растровые изображения и пытаюсь отобразить его. Но я получаю пустой экран. См. Мой код нижеAndroid CoverFlow отображает текст вместо изображений

public class CoverFlowDemoActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     CoverFlow coverFlow; 
     coverFlow = new CoverFlow(this); 

     coverFlow.setAdapter(new ImageAdapter(this)); 

     ImageAdapter coverImageAdapter = new ImageAdapter(this); 

     coverFlow.setAdapter(coverImageAdapter); 

     coverImageAdapter.populateBitmapArray(); 

     coverFlow.setSpacing(-25); 
     coverFlow.setSelection(4, true); 
     coverFlow.setAnimationDuration(1000); 

     setContentView(coverFlow); 
    } 

    public class ImageAdapter extends BaseAdapter { 
     int mGalleryItemBackground; 
     private Context mContext; 

     private Bitmap[] bitmapImages; 

     public ImageAdapter(Context c) { 
      mContext = c; 
      bitmapImages = new Bitmap[9]; 
     } 

     public void populateBitmapArray() { 

      for (int i = 0; i < 9; i++) { 
       Bitmap originalImage = textAsBitmap("Example Test", 50f, 
         R.color.red); 
       bitmapImages[i] = originalImage; 
      } 

     } 

     public int getCount() { 
      return 9; 
     } 

     public Object getItem(int position) { 
      return position; 
     } 

     public long getItemId(int position) { 
      return position; 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 

      // Use this code if you want to load from resources 
      ImageView i = new ImageView(mContext); 
      i.setImageBitmap(bitmapImages[position]); 
      i.setLayoutParams(new CoverFlow.LayoutParams(130, 130)); 
      i.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 

      // Make sure we set anti-aliasing otherwise we get jaggies 
      BitmapDrawable drawable = (BitmapDrawable) i.getDrawable(); 
      drawable.setAntiAlias(true); 

      return i; 

      // return mImages[position]; 
     } 

     /** 
     * Returns the size (0.0f to 1.0f) of the views depending on the 
     * 'offset' to the center. 
     */ 
     public float getScale(boolean focused, int offset) { 
      /* Formula: 1/(2^offset) */ 
      return Math.max(0, 1.0f/(float) Math.pow(2, Math.abs(offset))); 
     } 

     public Bitmap textAsBitmap(String text, float largest, int textColor) { 
      Paint paint = new Paint(); 
      paint.setTextSize(largest); 
      paint.setColor(textColor); 
      // int width = (int) (paint.measureText(text) + 0.5f); // round 

      int width = 500; 

      float baseline = (int) (paint.ascent() + 0.5f) + 3f; 
      // int height = (int) ((baseline + paint.descent() + 0.5f) + 3); 

      int height = 500; 
      Bitmap image = Bitmap.createBitmap(width, height, 
        Bitmap.Config.ARGB_8888); 
      Canvas canvas = new Canvas(image); 
      canvas.drawText(text, 0, baseline, paint); 
      return image; 

     } 

    } 
} 
+0

Вы говорите о галерее виджете? Если это так, вы можете легко нарисовать текст в растровое изображение и отобразить его с этим. (посмотрите в Canvas.drawText()) – Renard

+0

Я думаю, вы говорите о чем-то вроде [ЭТО] (http://code.google.com/p/android-coverflow/), но вы должны четко понимать это в своем OP, а не догадываться. Некоторые люди не знают, что такое виджет 'CoverFlow'. – adneal

+0

@aneal да. Я пытаюсь сделать вывод, похожий на это видео. – Allwyn

ответ

1

Я делал что-то похожее на ваше. И я понимаю, что вы рисуете вне своего образа.

Для решения проблемы измените настройку «базовая линия» на «250», и вы увидите текст в виде изображения.

.: например

ИЗМЕНЕНИЯ

canvas.drawText(text, 0, baseline, paint); 

К

canvas.drawText(text, 0, 250, paint); 

Надеется, что это будет полезно для вас

+0

Спасибо. Позвольте мне попытаться сообщить, работает ли он – Allwyn

+0

Конечно. Если вы столкнулись с какой-либо проблемой, просто дайте мне знать. Потому что я пробовал свой код и после его редактирования работает!^о- –