Friday, August 21, 2015

Volley Network Image View


.
Volley Network Image View
Using Android Studio 1.4

1) Create New Project

Application Name: MyVolleyLoadImage1
Select API 14:Android 4.0 (IceCreamSandwich)
Follow the wizard to create New Blank Activity.

2) Import Volley Library Into Project

2.1) Download Volley Project

Download volley20151105.zip and unzip it.

2.2) Import using Android Studio

2.3) Add Dependencies

Build.Gradle(Module:App)
apply plugin'com.android.application'
android {
   compileSdkVersion 23
   buildToolsVersion "23.0.1"
   defaultConfig {
       applicationId "com.notarazi.myvolleyloadimage1"
       minSdkVersion 14
       targetSdkVersion 23
       versionCode 1
       versionName "1.0"
   }
   buildTypes {
       release {
           minifyEnabled false
           proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
       }
   }
}
dependencies {
   compile fileTree(dir'libs'include: ['*.jar'])
   testCompile 'junit:junit:4.12'
   compile 'com.android.support:design:23.1.0'
   compile project(':volley')
}
Sync Project with Gradle Files

2.4) Add Permission

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.notarazi.myvolleyloadimage1" >
   <uses-permission android:name="android.permission.INTERNET"/>
   <application
      android:name="com.notarazi.myvolleyloadimage1.MyApplication"
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:supportsRtl="true"
       android:theme="@style/AppTheme" >
       <activity
           android:name=".MainActivity"
           android:label="@string/app_name"
           android:theme="@style/AppTheme.NoActionBar" >
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>
If you missed this step, your debug message will tell you about this.

2.5) Create MyApplication.java

package com.notarazi.myvolleyloadimage1;
import android.app.Application;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;
public class MyApplication extends Application {
   private RequestQueue mRequestQueue;
   private static MyApplication mInstance;
   private ImageLoader mImageLoader;
   @Override
   public void onCreate() {
       super.onCreate();
       mInstance this;
   }
   public static synchronized MyApplication getInstance() {
       return mInstance;
   }
   public RequestQueue getReqQueue() {
       if (mRequestQueue == null) {
           mRequestQueue = Volley.newRequestQueue(getApplicationContext());
       }
       return mRequestQueue;
   }
   public <Tvoid addToReqQueue(Request<T> req, String tag) {
       getReqQueue().add(req);
   }
   public <Tvoid addToReqQueue(Request<T> req) {
       getReqQueue().add(req);
   }
   public void cancelPendingReq(Object tag) {
       if (mRequestQueue != null) {
           mRequestQueue.cancelAll(tag);
       }
   }
   public ImageLoader getImageLoader() {
       getReqQueue();
       if (mImageLoader == null) {
           mImageLoader new ImageLoader(this.mRequestQueue,
                   new BitmapLruCache());
       }
       return this.mImageLoader;
   }
}

3) Edit Layout

3.1) res/layout/content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin"
   app:layout_behavior="@string/appbar_scrolling_view_behavior"
   tools:showIn="@layout/activity_main"
   tools:context=".MainActivity">
   <LinearLayout
       xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:tools="http://schemas.android.com/tools"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:orientation="vertical"
       tools:context="com.notarazi.myvolleyloadimage1.MainActivity" >
       <com.android.volley.toolbox.NetworkImageView
           android:id="@+id/thumbnail"
           android:layout_width="180dp"
           android:layout_height="210dp"
           android:layout_gravity="center"
           android:layout_marginTop="25dp"
           android:src="@drawable/loading" />
   </LinearLayout>
</RelativeLayout>

4) Add BitMap Cache

4.1) BitmapLruCache.java

package com.notarazi.myvolleyloadimage1;
import android.graphics.Bitmap;
import android.support.v4.util.LruCache;
import com.android.volley.toolbox.ImageLoader.ImageCache;
public class BitmapLruCache extends LruCache<String, Bitmap> implements
       ImageCache {
   public static int getDefaultLruCacheSize() {
       final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
       final int cacheSize = maxMemory / 8;
       return cacheSize;
   }
   public BitmapLruCache() {
       this(getDefaultLruCacheSize());
   }
   public BitmapLruCache(int sizeInKiloBytes) {
       super(sizeInKiloBytes);
   }
   @Override
   protected int sizeOf(String key, Bitmap value) {
       return value.getRowBytes() * value.getHeight() / 1024;
   }
   @Override
   public Bitmap getBitmap(String url) {
       return get(url);
   }
   @Override
   public void putBitmap(String url, Bitmap bitmap) {
       put(url, bitmap);
   }
}

4.2) Add Loading Image

Download ”Loading...” image and place it under res/drawable.

5) Edit MainActivity.java

package com.notarazi.myvolleyloadimage1;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;
public class MainActivity extends AppCompatActivity {
   NetworkImageView imageView;
   String url "http://3.bp.blogspot.com/-sgIxDTL-WaE/Vh6ZBGDW_TI/AAAAAAAALR0/d71cC9E29E4/s250/studio-logo.png";
   ProgressDialog PD;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
       setSupportActionBar(toolbar);
       getNetworkImage();
       FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
       fab.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                       .setAction("Action"null).show();
           }
       });
   }
   private void getNetworkImage() {
           imageView = (NetworkImageView) findViewById(R.id.thumbnail);
           ImageLoader imageLoader = MyApplication.getInstance().getImageLoader();
           imageView.setImageUrl(url, imageLoader);
       }
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       // Inflate the menu; this adds items to the action bar if it is present.
       getMenuInflater().inflate(R.menu.menu_main, menu);
       return true;
   }
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
       // Handle action bar item clicks here. The action bar will
       // automatically handle clicks on the Home/Up button, so long
       // as you specify a parent activity in AndroidManifest.xml.
       int id = item.getItemId();
       //noinspection SimplifiableIfStatement
       if (id == R.id.action_settings) {
           return true;
       }
       return super.onOptionsItemSelected(item);
   }
}
OUTCOME.

DOWNLOAD

REFERENCES




.

No comments:

Post a Comment