We are going to make an interesting GUI component in Android . You people have become bored of ImageView and ImageButtons, their boring looks and all .Lets try a new concept to display images .
What do we need ?
-> We will make a gallery of Images which will display each and every images you have included one by one . in animated format .
Step 1 : Make a layout with a Gallery and ImageSwitcher and (TextView - optional).(activity_main.xml) .
See to it that the id's of Gallery and ImageSwitcher are to be remembered .
The code for activity_main.xml is given below .
activity_main.xml
Step 2 : We make an attribute file in res -> values folder . Right Click on values under res folder and Select New -> Android XML File from your Packege Explorer .
Step 3 : Give name as attrs.xml to the file and Click Finish .
Step 4 : Copy the code below in attrs.xml .
attrs.xml
Step 5 : Include three images in res ->. drawable_hdpi folder .Include images as shown below .
Select Copy files and press OK . Also drag other two images the same way . Name all the three images as pic1 , pic2 and pic3 .
Step 6 : Make a class in src folder or use existing (MainActivity.java) . The code for the class is given below .
MainActivity.java
Step 7 :Run the Project.
Explanation of the code :
- XML layout (activity_main.xml)
- Gallery
- ImageSwitcher
- A java Class (MainActivity.java)
- Attributes file (attrs.xml)
- Any number of images of your choice (I choose 3)
-> We will make a gallery of Images which will display each and every images you have included one by one . in animated format .
Step 1 : Make a layout with a Gallery and ImageSwitcher and (TextView - optional).(activity_main.xml) .
See to it that the id's of Gallery and ImageSwitcher are to be remembered .
The code for activity_main.xml is given below .
activity_main.xml
<?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" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Image switches one by one"/> <Gallery android:id="@+id/galleryimg" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <ImageSwitcher android:id="@+id/switcherimg" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentLeft="true" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" /> </LinearLayout>
Step 2 : We make an attribute file in res -> values folder . Right Click on values under res folder and Select New -> Android XML File from your Packege Explorer .
Step 3 : Give name as attrs.xml to the file and Click Finish .
Step 4 : Copy the code below in attrs.xml .
attrs.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="Gallery1"> <attr name="android:galleryItemBackground" /> </declare-styleable> </resources>
Step 5 : Include three images in res ->. drawable_hdpi folder .Include images as shown below .
Select Copy files and press OK . Also drag other two images the same way . Name all the three images as pic1 , pic2 and pic3 .
Step 6 : Make a class in src folder or use existing (MainActivity.java) . The code for the class is given below .
MainActivity.java
package com.mia.imagegallery; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.animation.AnimationUtils; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.Gallery; import android.widget.ImageSwitcher; import android.widget.ImageView; import android.widget.ViewSwitcher.ViewFactory; import android.app.Activity; import android.content.Context; import android.content.res.TypedArray; @SuppressWarnings("deprecation") public class MainActivity extends Activity implements ViewFactory { Integer[] imageIDs = { R.drawable.pic1, R.drawable.pic2, R.drawable.pic3 }; private ImageSwitcher imageSwitcher2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageSwitcher2 = (ImageSwitcher) findViewById(R.id.switcherimg); imageSwitcher2.setFactory(this); imageSwitcher2.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in)); imageSwitcher2.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out)); Gallery gallery = (Gallery) findViewById(R.id.galleryimg); gallery.setAdapter(new ImageAdapter(this)); gallery.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent,View v, int position,long id) { imageSwitcher2.setImageResource(imageIDs[position]); } }); } @Override public View makeView() { // TODO Auto-generated method stub ImageView imageView = new ImageView(this); imageView.setBackgroundColor(0xFF000000); imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); imageView.setLayoutParams(new ImageSwitcher.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT )); return imageView; } public class ImageAdapter extends BaseAdapter { private Context context; private int itemBackground; public ImageAdapter(Context c) { context = c; TypedArray a = obtainStyledAttributes(R.styleable.Gallery1); itemBackground = a.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0); a.recycle(); } @Override public int getCount() { // TODO Auto-generated method stub return imageIDs.length; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ImageView imageView = new ImageView(context); imageView.setImageResource(imageIDs[position]); imageView.setScaleType(ImageView.ScaleType.FIT_XY); imageView.setLayoutParams(new Gallery.LayoutParams(150, 120)); imageView.setBackgroundResource(itemBackground); return imageView; } } }
Step 7 :Run the Project.
![]() | ![]() | ![]() |
Explanation of the code :
- We define the layout in activity_main.xml which contains Gallery and ImageSwitcher .The Gallery and ImageSwitcher contains the GUI for switching images one by one by default .
- We change the default ids for Gallery and ImageSwitcher so that we can use them in our class .
<Gallery android:id="@+id/galleryimg" android:layout_width="fill_parent" android:layout_height="wrap_content"/> \ <ImageSwitcher android:id="@+id/switcherimg" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentLeft="true" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" />
- We define the style of our gallery using styleable attribute in file attrs.xml as a resource .
<declare-styleable name="Gallery1"> <attr name="android:galleryItemBackground" /> </declare-styleable>
- Our class MainActivity extends Activity and implements interface ViewFactory . ViewFactory creates dynamic view of the gallery .
public class MainActivity extends Activity implements ViewFactory
- Then we make Integer array of the id of images from R.java .
Integer[] imageIDs = { R.drawable.pic1, R.drawable.pic2, R.drawable.pic3 };
- We make an instance of ImageSwitcher which we connect it to ImageSwitcher in activity_main.xml with is as switcherimg .
imageSwitcher2 = (ImageSwitcher) findViewById(R.id.switcherimg);
- setFactory will switch between two views .
imageSwitcher2.setFactory(this);
- setOutAnimation and setInAnimation will change the views with animation aspects .
imageSwitcher2.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in)); imageSwitcher2.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out));
- All other methods are self explanatory .
Stay tuned with Made In Android
No comments:
Post a Comment