Hello Friends,
Today i have done some new research on how can we capture an Image of the whole ListView even the whole items of listview are not visible on screen and save it as a bitmap even though all the items of the ListView are not visible on the screen.
I have made a simple method which gives you image of the listview.
So here i am going to show you the code to capture the listview and save it as an image into the SDcard.
You can use the below code in your application directly.
Here is the method which captures your whole ListView and convert it into the Bitmap.
Here is the activity code which shows how you can use the above methods in your application.
I have called a method onClick of Button to generate image.
Layout file of an activity
Let me know if anyone facing any problem or any kind of improvement needed.
Thank you.
Enjoy !!!
Today i have done some new research on how can we capture an Image of the whole ListView even the whole items of listview are not visible on screen and save it as a bitmap even though all the items of the ListView are not visible on the screen.
I have made a simple method which gives you image of the listview.
So here i am going to show you the code to capture the listview and save it as an image into the SDcard.
You can use the below code in your application directly.
Here is the method which captures your whole ListView and convert it into the Bitmap.
/**
* Take a screenshot of a whole listview even if the whole listview elements
* aren't fully visible in the screen
*
* @param p_ListView
* -ListView instance
* @return-Bitmap of List
*/
public void getWholeListViewItemsToBitmap(ListView p_ListView) {
ListView listview = p_ListView;
ListAdapter adapter = listview.getAdapter();
int itemscount = adapter.getCount();
int allitemsheight = 0;
List<Bitmap> bmps = new ArrayList<Bitmap>();
for (int i = 0; i < itemscount; i++) {
View childView = adapter.getView(i, null, listview);
childView.measure(
MeasureSpec.makeMeasureSpec(listview.getWidth(), MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
childView.layout(0, 0, childView.getMeasuredWidth(), childView.getMeasuredHeight());
childView.setDrawingCacheEnabled(true);
childView.buildDrawingCache();
bmps.add(childView.getDrawingCache());
allitemsheight += childView.getMeasuredHeight();
}
Bitmap bigbitmap = Bitmap.createBitmap(listview.getMeasuredWidth(), allitemsheight,
Bitmap.Config.ARGB_8888);
Canvas bigcanvas = new Canvas(bigbitmap);
Paint paint = new Paint();
int iHeight = 0;
for (int i = 0; i < bmps.size(); i++) {
Bitmap bmp = bmps.get(i);
bigcanvas.drawBitmap(bmp, 0, iHeight, paint);
iHeight += bmp.getHeight();
bmp.recycle();
bmp = null;
}
storeImage(bigbitmap, "Test.jpg");
}
/**
* Convert the bitmap into image and save it into the sdcard.
*
* @param imageData
* -Bitmap image.
* @param filename
* -Name of the image.
* @return
*/
public boolean storeImage(Bitmap imageData, String filename) {
// get path to external storage (SD card)
File sdIconStorageDir = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath() + "/myAppDir/");
// create storage directories, if they don't exist
sdIconStorageDir.mkdirs();
try {
String filePath = sdIconStorageDir.toString() + File.separator + filename;
FileOutputStream fileOutputStream = new FileOutputStream(filePath);
BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream);
Toast.makeText(m_cont, "Image Saved at----" + filePath, Toast.LENGTH_LONG).show();
// choose another format if PNG doesn't suit you
imageData.compress(CompressFormat.PNG, 100, bos);
bos.flush();
bos.close();
} catch (FileNotFoundException e) {
Log.w("TAG", "Error saving image file: " + e.getMessage());
return false;
} catch (IOException e) {
Log.w("TAG", "Error saving image file: " + e.getMessage());
return false;
}
return true;
}
Here is the activity code which shows how you can use the above methods in your application.
I have called a method onClick of Button to generate image.
public class SimpleListViewActivity extends Activity {
private ListView mainListView;
private ArrayAdapter<String> listAdapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Find the ListView resource.
mainListView = (ListView) findViewById(R.id.mainListView);
// Create and populate a List of planet names.
String[] planets = new String[] { "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn",
"Uranus", "Neptune", "Solar", "Pluto","Ceres","Haumea","Makemake","Eris" };
ArrayList<String> planetList = new ArrayList<String>();
planetList.addAll(Arrays.asList(planets));
// Create ArrayAdapter using the planet list.
listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, planetList);
// Set the ArrayAdapter as the ListView's adapter.
mainListView.setAdapter(listAdapter);
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getWholeListViewItemsToBitmap(mainListView);
}
});
}
Layout file of an activity
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Capture Screen"
android:visibility="visible" />
<ListView
android:id="@+id/mainListView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/white"
android:listSelector="@null" >
</ListView>
</LinearLayout>
Let me know if anyone facing any problem or any kind of improvement needed.
Thank you.
Enjoy !!!
No comments:
Post a Comment