| /* |
| * Copyright (C) 2014 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.example.android.supportv7.graphics; |
| |
| import com.example.android.supportv7.R; |
| |
| import android.graphics.Bitmap; |
| import android.net.Uri; |
| import android.os.Bundle; |
| import android.support.v7.app.AppCompatActivity; |
| import android.support.v7.graphics.Palette; |
| import android.view.Menu; |
| import android.view.MenuItem; |
| import android.view.View; |
| import android.view.ViewGroup; |
| import android.widget.AdapterView; |
| import android.widget.BaseAdapter; |
| import android.widget.GridView; |
| import android.widget.ImageView; |
| import android.widget.Toast; |
| |
| import java.util.List; |
| |
| /** |
| * Activity which displays the more details about a generated {@link Palette} for a specific |
| * {@link android.provider.MediaStore} image. |
| * |
| * Displays the full generated palette of colors in a grid, which allows clicking on an palette item |
| * to display more information in a {@link Toast}. |
| * |
| * Also allows the customization of the number of colors used in the palette generation for |
| * demonstration purposes. |
| */ |
| public class PaletteDetailActivity extends AppCompatActivity { |
| |
| private ImageView mImageView; |
| private GridView mGridView; |
| private SwatchesPalette mSwatchesPalette; |
| |
| private Uri mImageUri; |
| |
| private Toast mCurrentToast; |
| |
| @Override |
| protected void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| setContentView(R.layout.palette_activity_detail); |
| |
| mImageUri = getIntent().getData(); |
| |
| mImageView = (ImageView) findViewById(R.id.image); |
| mGridView = (GridView) findViewById(R.id.palette); |
| mSwatchesPalette = new SwatchesPalette(); |
| mGridView.setAdapter(mSwatchesPalette); |
| |
| // Set an OnItemClickListener to display a information Toast when a Palette item is clicked |
| mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { |
| @Override |
| public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) { |
| // Cancel the current Toast if there is already one being displayed |
| if (mCurrentToast != null) { |
| mCurrentToast.cancel(); |
| } |
| |
| final Palette.Swatch item = (Palette.Swatch) adapterView.getItemAtPosition(pos); |
| mCurrentToast = Toast.makeText(PaletteDetailActivity.this, |
| item.toString(), Toast.LENGTH_LONG); |
| mCurrentToast.show(); |
| } |
| }); |
| |
| // Load the image with a default number of colors |
| loadImage(16); |
| } |
| |
| @Override |
| public boolean onCreateOptionsMenu(Menu menu) { |
| getMenuInflater().inflate(R.menu.sample_palette_actions, menu); |
| return true; |
| } |
| |
| @Override |
| public boolean onOptionsItemSelected(MenuItem item) { |
| switch (item.getItemId()) { |
| case R.id.menu_num_colors_8: |
| loadImage(8); |
| item.setChecked(true); |
| return true; |
| case R.id.menu_num_colors_12: |
| loadImage(12); |
| item.setChecked(true); |
| return true; |
| case R.id.menu_num_colors_16: |
| loadImage(16); |
| item.setChecked(true); |
| return true; |
| case R.id.menu_num_colors_24: |
| loadImage(24); |
| item.setChecked(true); |
| return true; |
| case R.id.menu_num_colors_32: |
| loadImage(32); |
| item.setChecked(true); |
| return true; |
| } |
| return super.onOptionsItemSelected(item); |
| } |
| |
| private void loadImage(final int numColors) { |
| final int id = Integer.parseInt(mImageUri.getLastPathSegment()); |
| |
| ImageLoader.loadMediaStoreThumbnail(mImageView, id, new ImageLoader.Listener() { |
| @Override |
| public void onImageLoaded(Bitmap bitmap) { |
| Palette.generateAsync(bitmap, numColors, new Palette.PaletteAsyncListener() { |
| @Override |
| public void onGenerated(Palette palette) { |
| populatePalette(palette); |
| } |
| }); |
| } |
| }); |
| } |
| |
| private class SwatchesPalette extends BaseAdapter { |
| |
| private List<Palette.Swatch> mSwatches; |
| |
| @Override |
| public int getCount() { |
| return mSwatches != null ? mSwatches.size() : 0; |
| } |
| |
| @Override |
| public Palette.Swatch getItem(int position) { |
| return mSwatches.get(position); |
| } |
| |
| @Override |
| public long getItemId(int position) { |
| return position; |
| } |
| |
| void setSwatches(List<Palette.Swatch> palette) { |
| mSwatches = palette; |
| notifyDataSetChanged(); |
| } |
| |
| @Override |
| public View getView(int position, View view, ViewGroup parent) { |
| if (view == null) { |
| view = getLayoutInflater().inflate(R.layout.palette_grid_item, parent, false); |
| } |
| setBackgroundColor(view, getItem(position)); |
| return view; |
| } |
| } |
| |
| private void populatePalette(Palette palette) { |
| mSwatchesPalette.setSwatches(palette.getSwatches()); |
| |
| setBackgroundColor(findViewById(R.id.text_vibrant), palette.getVibrantSwatch()); |
| setBackgroundColor(findViewById(R.id.text_muted), palette.getMutedSwatch()); |
| setBackgroundColor(findViewById(R.id.text_light_vibrant), palette.getLightVibrantSwatch()); |
| setBackgroundColor(findViewById(R.id.text_light_muted), palette.getLightMutedSwatch()); |
| setBackgroundColor(findViewById(R.id.text_dark_vibrant), palette.getDarkVibrantSwatch()); |
| setBackgroundColor(findViewById(R.id.text_dark_muted), palette.getDarkMutedSwatch()); |
| } |
| |
| private void setBackgroundColor(View view, Palette.Swatch swatch) { |
| if (view != null && swatch != null) { |
| view.setBackgroundColor(swatch.getRgb()); |
| } |
| } |
| |
| } |