我们所有的view都继承自View类,View类里有个方法叫ondraw(). 即,我们看到的界面都是画出来的,所以我们可以重写ondraw()方法。
既然知道了这点就好办了,还有个难点就是,我们的倒影也是画出来的,那我们从哪去取原始图片呢?熟悉View的童鞋都知道Cache这个东西,不错,就是通过Cache我们取到了原始图片。
放源码了。,感谢期待。这个只是个demo,并不完善哈,布局什么的还需要调整下,或者我什么时候有空再进行一次封装,就可以直接从布局文件中任意调整了。
布局文件中增加如下代码
代码如下 | 复制代码 |
android:layout_marginTop="20dp" android:id="@+id/test_reflect"android:layout_width="fill_parent" android:layout_height="50dp"android:textSize="25dp" android:textColor="#ff0000"android:textStyle="bold"android:gravity="top|center_horizontal" android:text="不会飞翔的翅膀 XP.C"/> android:layout_marginTop="20dp" android:id="@+id/test_reflect"android:layout_width="fill_parent" android:layout_height="50dp"android:textSize="25dp" android:textColor="#a0a0a0"android:textStyle="italic"android:gravity="top|center_horizontal" android:text="[email protected]"/> |
类代码如下:
代码如下 | 复制代码 |
/* * Copyright (C) 2011 TC 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.**apa*che.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. This code is base on the Android TextView and was Created by [email protected] * * @author TC */ packagecom.tc.reflect; importandroid.content.Context; importandroid.graphics.Bitmap; importandroid.graphics.Canvas; importandroid.graphics.LinearGradient; importandroid.graphics.Matrix; importandroid.graphics.Paint; importandroid.graphics.PorterDuffXfermode; importandroid.graphics.PorterDuff.Mode; importandroid.graphics.Shader.TileMode; importandroid.util.AttributeSet; importandroid.widget.TextView; publicclassReflectTextViewextendsTextView { publicReflectTextView(Context context) { super(context); } publicReflectTextView(Context context, AttributeSet attrs,intdefStyle) { super(context, attrs, defStyle); } publicReflectTextView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protectedvoidonDraw(Canvas canvas) { //draw the text from layout() super.onDraw(canvas); intheight = getHeight(); intwidth = getWidth(); //make the shadow reverse of Y Matrix matrix =newMatrix(); matrix.preScale(1, -1); //make sure you can use the cache setDrawingCacheEnabled(true); //create bitmap from cache,this is the most important of this Bitmap originalImage = Bitmap.createBitmap(getDrawingCache()); //create the shadow Bitmap reflectionImage = Bitmap.createBitmap(originalImage,0, height /3, width, height /3, matrix,false); //draw the shadow canvas.drawBitmap(reflectionImage,0,8* height /12,null); //process shadow bitmap to make it shadow like Paint paint =newPaint(); LinearGradient shader =newLinearGradient(0,8* height /12,0, height,0x70ffffff,0x00ffffff, TileMode.CLAMP); paint.setShader(shader); paint.setXfermode(newPorterDuffXfermode(Mode.DST_IN)); canvas.drawRect(0,8* height /12, width, height, paint); } } |
樱花校园模拟器4399中文版
樱花校园模拟器4399中文版,十分奇趣好玩的3d校园冒险模拟
我的暑假秘密回忆繁星新春版
我的暑假秘密回忆繁星新春版是一款少女模拟养成类休闲游戏。这款
樱花校园模拟器国际版
樱花校园模拟器国际版,一个超级自由超级好玩的自由恋爱模拟的游
饥荒海难九游版
饥荒海难九游版,带你去真实的海岛上感受一下什么才是真正的孤岛
盖瑞模组体验版最新版
盖瑞模组体验版是玩法非常丰富多元化的沙盒建造游戏,玩家可以在