Pageable Listview

by Makas Tzavellas » Tue, 16 Mar 2010 03:16:02 GMT


Sponsored Links
 Hi all,

I recently worked on an Android app that needed a ListView that
behaves "similar" to the Android market, by allowing the list in the
ListView to "grow" as the user scrolls to the bottom.

I tried to implement it in a generic manner so that it could be
reused. For those that has the same requirement, the source code is
available at https://code.google.com/p/androidpageablelistview/

The code will still need some work, it's only the first iteration.

Makas

--



Other Threads

1. source code help - reading framebuffer using glReadPixels

Hi,

I am new to Android development and working on an assignment to read
the framebuffer after some time interval and save it as an image.
I have come up with the following code initially only for reading and
saving the framebuffer, but this is not working and giving a run time
error. The emulator says that "the application stopped unexpectedly,
Please try again"

This is the current code: (I am using the Android 2.2 with API level 8
virtual device for testing, I don't have a physical device at the
moment)

public class mainActivity extends Activity
{
        Bitmap mSavedBM;
        private EGL10 egl;
    private EGLDisplay display;
    private EGLConfig config;
    private EGLSurface surface;
    private EGLContext eglContext;
    private GL11 gl;
    protected int width, height;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        // get the screen width and height
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        int screenWidth = dm.widthPixels;
        int screenHeight = dm.heightPixels;

        String SCREENSHOT_DIR = "/screenshots";
        initGLFr(); //GlView initialized.
        savePixels( 0, 10, screenWidth, screenHeight, gl); //this gets
the screen to the mSavedBM.
        saveBitmap(mSavedBM, SCREENSHOT_DIR, "capturedImage");

        //Now we need to save the bitmap (the screen capture) to some
location.
        setContentView(R.layout.main); //This displays the content on
the screen

    }
    private void initGLFr()
    {
        egl = (EGL10) EGLContext.getEGL();
        display = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
        int[] ver = new int[2];
        egl.eglInitialize(display, ver);

        int[] configSpec = {EGL10.EGL_NONE};
        EGLConfig[] configOut = new EGLConfig[1];
        int[] nConfig = new int[1];
        egl.eglChooseConfig(display, configSpec, configOut, 1,
nConfig);
        config = configOut[0];
        eglContext = egl.eglCreateContext(display, config,
EGL10.EGL_NO_CONTEXT, null);
        surface = egl.eglCreateWindowSurface(display, config,
SurfaceHolder.SURFACE_TYPE_GPU, null);
        egl.eglMakeCurrent(display, surface, surface, eglContext);
        gl = (GL11) eglContext.getGL();
    }
    public void savePixels(int x, int y, int w, int h, GL10 gl)
    {
        if (gl == null)
                return;

         synchronized (this) {
         if (mSavedBM != null) {
         mSavedBM.recycle();
         mSavedBM = null;
         }
         }

        int b[] = new int[w * (y + h)];
        int bt[] = new int[w * h];
        IntBuffer ib = IntBuffer.wrap(b);
        ib.position(0);
        gl.glReadPixels(x, 0, w, y + h,
GL10.GL_RGBA,GL10.GL_UNSIGNED_BYTE,ib);

        for (int i = 0, k = 0; i < h; i++, k++)
        {
                //OpenGLbitmap is incompatible with Android bitmap
            //and so, some corrections need to be done.
                for (int j = 0; j < w; j++)
                {
                        int pix = b[i * w + j];
                        int pb = (pix >> 16) & 0xff;
                        int pr = (pix << 16) & 0x00ff0000;
                        int pix1 = (pix & 0xff00ff00) | pr | pb;
                        bt[(h - k - 1) * w + j] = pix1;
                }
        }

        Bitmap sb = Bitmap.createBitmap(bt, w, h,
Bitmap.Config.ARGB_8888);
        synchronized (this)
        {
                mSavedBM = sb;
        }
    }

    static String saveBitmap(Bitmap bitmap, String dir, String
baseName) {
        try {
            File sdcard = Environment.getExternalStorageDirectory();
            File pictureDir = new File(sdcard, dir);
            pictureDir.mkdirs();
            File f = null;
            for (int i = 1; i < 200; ++i) {
                String name = baseName + i + ".png";
                f = new File(pictureDir, name);
                if (!f.exists()) {
                    break;
                }
            }
            if (!f.exists()) {
                String name = f.getAbsolutePath();
                FileOutputStream fos = new FileOutputStream(name);
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
                fos.flush();
                fos.close();
                return name;
            }
        } catch (Exception e) {

        } finally {
            /*
            if (fos != null) {
                fos.close();
            }
            */
        }
        return null;
    }
}


Also, if someone can point me to sample code/tutorial to get this work
done through the NDK r4. I have read that the NDK r4 supports the
opengl es 1.1 and 2.0.
the framebuffer directly using the "/dev/graphics/fb0".


Thanks,

-- 

2. prob in attaching txt file while email from internal package file storage

Hello,

I am successful in creating file using openFileOutput(). and can read
the file using openFileInput().
I am able attach file from external storage sdcard while emailing the
same using getExternalStorageDirectory as
sendIntent.putExtra(Intent.EXTRA_STREAM,
Uri.parse("file://"+Environment.getExternalStorageDirectory()+"/
zibra.txt"));

But while trying to attach file from the openOutputFile stored area
using sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+
getFilesDir() + "/zibra.txt"));, resulting emptied file emailing.
My file is stored in "/data/data/com.example/files/zibra.txt".

Could you please point out what is going wrong in it?
Intent sendIntent = new Intent(Intent.ACTION_SEND);
        sendIntent.putExtra(Intent.EXTRA_EMAIL, recipients);
        sendIntent.putExtra(Intent.EXTRA_SUBJECT, "attachment test");
        sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse
                        ("file://"+ getFilesDir() + "/zibra.txt"));
                        
//("file://"+Environment.getExternalStorageDirectory()+"/
zibra.txt"));
        sendIntent.setType("text/plain");
        startActivity(Intent.createChooser(sendIntent, "Send mail..."));

-- 

3. How to parse the xml from a httpresponse?

4. automatically turn on application

5. Converting audio format

6. Why Activity with Translucent background can not finish immediately?

7. Guide me to learn