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