• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.example.android.activityscenetransitionbasic;
18 
19 import com.android.volley.toolbox.ImageLoader;
20 import com.android.volley.toolbox.NetworkImageView;
21 import com.android.volley.toolbox.Volley;
22 
23 import android.app.Activity;
24 import android.app.ActivityOptions;
25 import android.content.Intent;
26 import android.os.Bundle;
27 import android.util.Pair;
28 import android.view.View;
29 import android.view.ViewGroup;
30 import android.widget.AdapterView;
31 import android.widget.BaseAdapter;
32 import android.widget.GridView;
33 import android.widget.TextView;
34 
35 /**
36  * Our main Activity in this sample. Displays a grid of items which an image and title. When the
37  * user clicks on an item, {@link DetailActivity} is launched, using the Activity Scene Transitions
38  * framework to animatedly do so.
39  */
40 public class MainActivity extends Activity implements AdapterView.OnItemClickListener {
41 
42     private GridView mGridView;
43     private GridAdapter mAdapter;
44 
45     private ImageLoader mImageLoader;
46 
47     @Override
onCreate(Bundle savedInstanceState)48     public void onCreate(Bundle savedInstanceState) {
49         super.onCreate(savedInstanceState);
50         setContentView(R.layout.grid);
51 
52         // Retrieve the ImageLoader we are going to use for NetworkImageView
53         mImageLoader = new ImageLoader(Volley.newRequestQueue(this), ImageMemoryCache.INSTANCE);
54 
55         // Setup the GridView and set the adapter
56         mGridView = (GridView) findViewById(R.id.grid);
57         mGridView.setOnItemClickListener(this);
58         mAdapter = new GridAdapter();
59         mGridView.setAdapter(mAdapter);
60     }
61 
62     /**
63      * Called when an item in the {@link android.widget.GridView} is clicked. Here will launch the
64      * {@link DetailActivity}, using the Scene Transition animation functionality.
65      */
66     @Override
onItemClick(AdapterView<?> adapterView, View view, int position, long id)67     public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
68         Item item = (Item) adapterView.getItemAtPosition(position);
69 
70         // Construct an Intent as normal
71         Intent intent = new Intent(this, DetailActivity.class);
72         intent.putExtra(DetailActivity.EXTRA_PARAM_ID, item.getId());
73 
74         // BEGIN_INCLUDE(start_activity)
75         /**
76          * Now create an {@link android.app.ActivityOptions} instance using the
77          * {@link android.app.ActivityOptions#makeSceneTransitionAnimation(android.app.Activity, android.util.Pair[])} factory method.
78          */
79         ActivityOptions activityOptions = ActivityOptions.makeSceneTransitionAnimation(
80                 this,
81 
82                 // Now we provide a list of Pair items which contain the view we can transitioning
83                 // from, and the name of the view it is transitioning to, in the launched activity
84                 new Pair<View, String>(
85                         view.findViewById(R.id.imageview_item),
86                         DetailActivity.VIEW_NAME_HEADER_IMAGE),
87                 new Pair<View, String>(
88                         view.findViewById(R.id.textview_name),
89                         DetailActivity.VIEW_NAME_HEADER_TITLE)
90         );
91 
92         // Now we can start the Activity, providing the activity options as a bundle
93         startActivity(intent, activityOptions.toBundle());
94         // END_INCLUDE(start_activity)
95     }
96 
97     /**
98      * {@link android.widget.BaseAdapter} which displays items.
99      */
100     private class GridAdapter extends BaseAdapter {
101 
102         @Override
getCount()103         public int getCount() {
104             return Item.ITEMS.length;
105         }
106 
107         @Override
getItem(int position)108         public Item getItem(int position) {
109             return Item.ITEMS[position];
110         }
111 
112         @Override
getItemId(int position)113         public long getItemId(int position) {
114             return getItem(position).getId();
115         }
116 
117         @Override
getView(int position, View view, ViewGroup viewGroup)118         public View getView(int position, View view, ViewGroup viewGroup) {
119             if (view == null) {
120                 view = getLayoutInflater().inflate(R.layout.grid_item, viewGroup, false);
121             }
122 
123             final Item item = getItem(position);
124 
125             // Load the thumbnail image
126             NetworkImageView image = (NetworkImageView) view.findViewById(R.id.imageview_item);
127             image.setImageUrl(item.getThumbnailUrl(), mImageLoader);
128 
129             // Set the TextView's contents
130             TextView name = (TextView) view.findViewById(R.id.textview_name);
131             name.setText(item.getName());
132 
133             // BEGIN_INCLUDE(grid_set_view_name)
134             /**
135              * As we're in an adapter we need to set each view's name dynamically, using the
136              * item's ID so that the names are unique.
137              */
138             image.setViewName("grid:image:" + item.getId());
139             name.setViewName("grid:name:" + item.getId());
140             // END_INCLUDE(grid_set_view_name)
141 
142             return view;
143         }
144     }
145 }
146