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