Home | History | Annotate | Download | only in view
      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 package com.example.android.supportv7.view;
     17 
     18 import android.app.Activity;
     19 import android.graphics.drawable.ColorDrawable;
     20 import android.os.Build;
     21 import android.os.Bundle;
     22 import android.os.Handler;
     23 import android.support.v4.view.ViewCompat;
     24 import android.support.v7.widget.CardView;
     25 import android.view.View;
     26 import android.view.ViewGroup;
     27 import android.widget.RadioGroup;
     28 import android.widget.SeekBar;
     29 import android.widget.TextView;
     30 
     31 import com.example.android.supportv7.R;
     32 
     33 import java.lang.reflect.Field;
     34 
     35 public class CardViewActivity extends Activity {
     36 
     37     CardView mCardView;
     38 
     39     TextView mInfoText;
     40 
     41     SeekBar mCornerRadiusSeekBar;
     42 
     43     SeekBar mWidthSeekBar;
     44 
     45     SeekBar mHeightSeekBar;
     46 
     47     SeekBar mElevationSeekBar;
     48 
     49     SeekBar mMaxElevationSeekBar;
     50 
     51     SeekBar mAlphaSeekBar;
     52 
     53     boolean mResizeCardView = true;
     54 
     55     private SeekBar.OnSeekBarChangeListener mOnSeekBarChangedListener
     56             = new SeekBar.OnSeekBarChangeListener() {
     57         @Override
     58         public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
     59             update();
     60         }
     61 
     62         @Override
     63         public void onStartTrackingTouch(SeekBar seekBar) {
     64 
     65         }
     66 
     67         @Override
     68         public void onStopTrackingTouch(SeekBar seekBar) {
     69 
     70         }
     71     };
     72 
     73     private void update() {
     74         mElevationSeekBar.setMax(mMaxElevationSeekBar.getProgress());
     75         if (mCornerRadiusSeekBar.getProgress() != mCardView.getRadius()) {
     76             mCardView.setRadius(mCornerRadiusSeekBar.getProgress());
     77         }
     78         if (mElevationSeekBar.getProgress() != mCardView.getCardElevation()) {
     79             mCardView.setCardElevation(mElevationSeekBar.getProgress());
     80         }
     81         if (mMaxElevationSeekBar.getProgress() != mCardView.getMaxCardElevation()) {
     82             mCardView.setMaxCardElevation(mMaxElevationSeekBar.getProgress());
     83         }
     84         ViewCompat.setAlpha(mCardView, mAlphaSeekBar.getProgress() / 255f);
     85         ViewGroup.LayoutParams lp;
     86         if (mResizeCardView) {
     87             lp = setViewBounds(mCardView);
     88         } else {
     89             lp = setViewBounds(mInfoText);
     90         }
     91         mInfoText.setText("radius: " + mCornerRadiusSeekBar.getProgress()
     92                 + ", alpha: " + mAlphaSeekBar.getProgress()
     93                 + "\n w: " + lp.width + "\nh: " + lp.height
     94                 + "\nelevation: " + mCardView.getCardElevation() + " of "
     95                 + mCardView.getMaxCardElevation());
     96     }
     97 
     98     private ViewGroup.LayoutParams setViewBounds(View view) {
     99         ViewGroup.LayoutParams lp = view.getLayoutParams();
    100         boolean changed = lp.width != mWidthSeekBar.getProgress()
    101                 || lp.height != mHeightSeekBar.getProgress();
    102         if (!changed) {
    103             return lp;
    104         }
    105         lp.width = mWidthSeekBar.getProgress();
    106         lp.height = mHeightSeekBar.getProgress();
    107         view.setLayoutParams(lp);
    108         return lp;
    109     }
    110 
    111     @Override
    112     protected void onCreate(Bundle savedInstanceState) {
    113         super.onCreate(savedInstanceState);
    114         setContentView(R.layout.activity_card_view);
    115         mInfoText = (TextView) findViewById(R.id.info_text);
    116         mCardView = (CardView) findViewById(R.id.card_view);
    117         mCornerRadiusSeekBar = (SeekBar) findViewById(R.id.corner_radius_seek_bar);
    118         mCornerRadiusSeekBar.setProgress((int) mCardView.getRadius());
    119         mCornerRadiusSeekBar.setOnSeekBarChangeListener(mOnSeekBarChangedListener);
    120 
    121         mWidthSeekBar = (SeekBar) findViewById(R.id.width_seek_bar);
    122         mWidthSeekBar.setProgress(mCardView.getLayoutParams().width);
    123 
    124         mWidthSeekBar.setOnSeekBarChangeListener(mOnSeekBarChangedListener);
    125 
    126         mHeightSeekBar = (SeekBar) findViewById(R.id.height_seek_bar);
    127         mHeightSeekBar.setProgress(mCardView.getLayoutParams().height);
    128         mHeightSeekBar.setOnSeekBarChangeListener(mOnSeekBarChangedListener);
    129 
    130         mElevationSeekBar = (SeekBar) findViewById(R.id.elevation_seek_bar);
    131         mElevationSeekBar.setProgress((int) mCardView.getCardElevation());
    132         mElevationSeekBar.setOnSeekBarChangeListener(mOnSeekBarChangedListener);
    133 
    134         mMaxElevationSeekBar = (SeekBar) findViewById(R.id.max_elevation_seek_bar);
    135         mMaxElevationSeekBar.setProgress((int) mCardView.getMaxCardElevation());
    136         mMaxElevationSeekBar.setOnSeekBarChangeListener(mOnSeekBarChangedListener);
    137 
    138         mAlphaSeekBar = (SeekBar) findViewById(R.id.alpha_seek_bar);
    139         mAlphaSeekBar.setProgress((int) ViewCompat.getAlpha(mCardView) * 255);
    140         mAlphaSeekBar.setOnSeekBarChangeListener(mOnSeekBarChangedListener);
    141 
    142         RadioGroup rb = (RadioGroup) findViewById(R.id.select_target_radio);
    143         rb.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    144             @Override
    145             public void onCheckedChanged(RadioGroup group, int checkedId) {
    146                 mResizeCardView = checkedId == R.id.resize_card_view;
    147                 update();
    148             }
    149         });
    150 
    151         new Handler().postDelayed(new Runnable() {
    152             @Override
    153             public void run() {
    154                 View content = findViewById(android.R.id.content);
    155                 mWidthSeekBar.setProgress(mCardView.getWidth());
    156                 mHeightSeekBar.setProgress(mCardView.getHeight());
    157                 mWidthSeekBar.setMax(content.getWidth());
    158                 mHeightSeekBar.setMax(content.getHeight());
    159                 update();
    160             }
    161         }, 100);
    162 
    163         ((RadioGroup) findViewById(R.id.select_bg_color_radio))
    164                 .setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    165                     @Override
    166                     public void onCheckedChanged(RadioGroup group, int checkedId) {
    167                         mCardView.setCardBackgroundColor(
    168                                 getResources().getColor(getColorId(checkedId)));
    169                     }
    170                 });
    171     }
    172 
    173     private int getColorId(int id) {
    174         switch (id) {
    175             case R.id.yellow:
    176                 return R.color.card_yellow;
    177             case R.id.aquatic:
    178                 return R.color.card_aquatic;
    179             case R.id.classic:
    180                 return R.color.card_classic;
    181             case R.id.sunbrite:
    182                 return R.color.card_sunbrite;
    183             case R.id.tropical:
    184                 return R.color.card_tropical;
    185             default:
    186                 return R.color.cardview_light_background;
    187         }
    188     }
    189 }
    190