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