- 浏览: 5820852 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
按比例放大图片,不拉伸失真
也试试下面这个:
import android.content.Context;
import android.util.AttributeSet;
import android.widget.RelativeLayout;
public class SquareLayout extends RelativeLayout {
public SquareLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public SquareLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SquareLayout(Context context) {
super(context);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(getDefaultSize(0, widthMeasureSpec), getDefaultSize(0, heightMeasureSpec));
heightMeasureSpec = widthMeasureSpec = MeasureSpec.makeMeasureSpec(getMeasuredWidth(), MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
import android.content.Context; import android.util.AttributeSet; import android.widget.ImageView; public class AspectRatioImageView extends ImageView { public AspectRatioImageView(Context context) { super(context); } public AspectRatioImageView(Context context, AttributeSet attrs) { super(context, attrs); } public AspectRatioImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = width * getDrawable().getIntrinsicHeight() / getDrawable().getIntrinsicWidth(); setMeasuredDimension(width, height); } }
也试试下面这个:
import android.content.Context; import android.util.AttributeSet; import android.widget.ImageView; public class RatioImageView extends ImageView { private int originalWidth; private int originalHeight; public RatioImageView(Context context) { this(context, null); } public RatioImageView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public RatioImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public void setOriginalSize(int originalWidth, int originalHeight) { this.originalWidth = originalWidth; this.originalHeight = originalHeight; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (originalWidth > 0 && originalHeight > 0) { float ratio = (float) originalWidth / (float) originalHeight; int width = MeasureSpec.getSize(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); if (width > 0) { height = (int) ((float) width / ratio); } else if (height > 0) { width = (int) ((float) height * ratio); } setMeasuredDimension(width, height); } else { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } }
import android.content.Context; import android.net.Uri; import android.text.TextUtils; import android.util.AttributeSet; import android.widget.ImageView; import com.laowch.githubtrends.R; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer; import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; /** * Created by lao on 3/4/14. */ public class AsyncImageView extends ImageView { String url; ImageLoadingListener imageLoadingListener; public AsyncImageView(final Context context) { super(context); init(); } public AsyncImageView(final Context context, final AttributeSet attrs) { super(context, attrs); init(); } public AsyncImageView(final Context context, final AttributeSet attrs, final int defStyle) { super(context, attrs, defStyle); init(); } public void setImageLoadingListener(ImageLoadingListener listener) { this.imageLoadingListener = listener; } protected void init() { } public void loadImage(final String imageUrl) { if (imageUrl != null && url != null) { if (Uri.parse(imageUrl).getPath().equals(Uri.parse(url).getPath())) { return; } } url = imageUrl; executeLoadImage(); } protected void executeLoadImage() { if (TextUtils.isEmpty(url)) { setImageResource(R.drawable.image_loading_resource); } else { DisplayImageOptions.Builder builder = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.image_loading_resource) .cacheInMemory(true) .cacheOnDisk(true) .displayer(new SimpleBitmapDisplayer()); DisplayImageOptions options = builder.build(); ImageLoader.getInstance().displayImage(url, this, options, imageLoadingListener); } } }
import android.content.Context; import android.util.AttributeSet; import android.widget.ImageView; public class SquareImageView extends ImageView { public SquareImageView(Context context) { super(context); } public SquareImageView(Context context, AttributeSet attrs) { super(context, attrs); } public SquareImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth()); } }
import android.content.Context;
import android.util.AttributeSet;
import android.widget.RelativeLayout;
public class SquareLayout extends RelativeLayout {
public SquareLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public SquareLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SquareLayout(Context context) {
super(context);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(getDefaultSize(0, widthMeasureSpec), getDefaultSize(0, heightMeasureSpec));
heightMeasureSpec = widthMeasureSpec = MeasureSpec.makeMeasureSpec(getMeasuredWidth(), MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
import android.content.Context; import android.util.AttributeSet; import android.util.SparseIntArray; import android.view.View; import android.widget.ImageView; import java.util.ArrayList; public class MultiStateView extends ImageView implements View.OnClickListener { private SparseIntArray mStateMap; private ArrayList<Integer> mStateList; private int mCurState; private IStateChangeListener mListener; public MultiStateView(Context context) { super(context); init(); } public MultiStateView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MultiStateView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { mStateMap = new SparseIntArray(); mStateList = new ArrayList<>(); setOnClickListener(this); } public void addStateAndImage(final int state, final int resId) { post(new Runnable() { @Override public void run() { mStateMap.put(state, resId); mStateList.add(state); if (mStateList.size() == 1) { mCurState = state; show(false); } } }); } public void show(final int state) { if (mCurState == state) return; post(new Runnable() { @Override public void run() { mCurState = state; show(false); } }); } private void show(boolean shouldNotify) { int id = mStateMap.get(mCurState); if (id == 0) return; setImageResource(id); if (shouldNotify && mListener != null) { mListener.onStateChange(mCurState); } } public void setOnStateChangeListener(IStateChangeListener listener) { this.mListener = listener; } @Override public void onClick(View v) { int size = mStateList.size(); for (int i = 0; i < size; i++) { if (mCurState == mStateList.get(i)) { mCurState = mStateList.get((i + 1) % size); break; } } show(true); } public interface IStateChangeListener { void onStateChange(int state); } } 用法: 实现implements MultiStateView.IStateChangeListener接口,重写onStateChange(int state) ...... mPlayModeView = (MultiStateView) findViewById(R.id.play_mode); ...... private void initPlayMode() { mPlayModeView.setOnStateChangeListener(this); mPlayModeView.addStateAndImage(SongManager.STATE_ALL, R.drawable.play_all); mPlayModeView.addStateAndImage(SongManager.STATE_RANDOM, R.drawable.play_random); mPlayModeView.addStateAndImage(SongManager.STATE_SINGLE, R.drawable.play_single); int state = SharedUtils.getInt(this, Constants.KEY_PLAY_MODE, SongManager.STATE_ALL); mPlayModeView.show(state); } ....... @Override public void onStateChange(int state) { switch (state) { case SongManager.STATE_ALL: ToastUtils.show(this, "顺序播放"); SharedUtils.saveInt(this, Constants.KEY_PLAY_MODE, state); SongManager.with(this).initPlayList(); break; case SongManager.STATE_RANDOM: ToastUtils.show(this, "随机播放"); SharedUtils.saveInt(this, Constants.KEY_PLAY_MODE, state); SongManager.with(this).initPlayList(); break; case SongManager.STATE_SINGLE: ToastUtils.show(this, "单曲循环"); SharedUtils.saveInt(this, Constants.KEY_PLAY_MODE, state); SongManager.with(this).initPlayList(); break; case SongManager.STATE_PINGING: mPlayService.play(); break; case SongManager.STATE_PAUSE: mPlayService.pause(); break; } }
发表评论
-
NestedScrollView滚动到顶部固定子View悬停挂靠粘在顶端
2018-10-31 20:45 6995网上有一个StickyScrollView,称之为粘性Scro ... -
自定义Behavior实现AppBarLayout越界弹性效果
2017-03-31 09:33 10369一、继承AppBarLayout.Beha ... -
Android - 一种相似图片搜索算法的实现
2017-03-31 09:33 2623算法 缩小尺寸。 将图片缩小到8x8的尺寸,总共64个 ... -
使用SpringAnimation实现带下拉弹簧动画的 ScrollView
2017-03-30 11:30 2850在刚推出的 Support Library 25.3.0 里面 ... -
Android为应用添加角标(Badge)
2017-03-30 11:21 61771.需求简介 角标是什么意思呢? 看下图即可明了: 可 ... -
Android端与笔记本利用局域网进行FTP通信
2017-03-23 10:17 980先看图 打开前: 打开后: Activity类 ... -
PorterDuffColorFilter 在项目中的基本使用
2017-03-03 10:58 1355有时候标题栏会浮在内容之上,而内容会有颜色的变化,这时候就要求 ... -
ColorAnimationView 实现了滑动Viewpager 时背景色动态变化的过渡效果
2017-02-24 09:41 2222用法在注释中: import android.anima ... -
迷你轻量级全方向完美滑动处理侧滑控件SlideLayout
2017-01-16 16:53 2596纯手工超级迷你轻量级全方向完美滑动处理侧滑控件(比官方 sup ... -
Effect
2017-01-05 09:57 0https://github.com/JetradarMobi ... -
动态主题库Colorful,容易地改变App的配色方案
2016-12-27 14:49 2565Colorful是一个动态主题库,允许您很容易地改变App的配 ... -
对视图的对角线切割DiagonalView
2016-12-27 14:23 1118提供对视图的对角线切割,具有很好的用户定制 基本用法 ... -
仿淘宝京东拖拽商品详情页上下滚动黏滞效果
2016-12-26 16:53 3494比较常用的效果,有现成的,如此甚好!:) import ... -
让任意view具有滑动效果的SlideUp
2016-12-26 09:26 1707基本的类,只有一个: import android.a ... -
AdvancedWebView
2016-12-21 09:44 16https://github.com/delight-im/A ... -
可设置圆角背景边框的按钮, 通过调节色彩明度自动计算按下(pressed)状态颜色
2016-11-02 22:13 1921可设置圆角背景边框的的按钮, 通过调节色彩明度自动计算按下(p ... -
网络请求库相关
2016-10-09 09:35 62https://github.com/amitshekhari ... -
ASimpleCache一个简单的缓存框架
2015-10-26 22:53 2178ASimpleCache 是一个为android制定的 轻量级 ... -
使用ViewDragHelper实现的DragLayout开门效果
2015-10-23 10:55 3415先看一下图,有个直观的了解,向下拖动handle就“开门了”: ... -
向上拖动时,可以惯性滑动显示到下一页的控件DragLayout
2015-10-16 14:53 5582仿照淘宝和聚美优品,在商品详情页,向上拖动时,可以加载下一页。 ...
相关推荐
本篇将详细探讨如何利用ImageView实现图片的放大功能,特别是如何让图片全屏显示,并支持局部拉伸放大,以及双击放大这一交互效果。 首先,我们需要了解ImageView的基础用法。ImageView继承自View类,通过设置其`...
例如,若要保持图片的宽高比并填充整个`ImageView`,可以这样设置: ```xml <ImageView android:scaleType="centerCrop" <!-- 这里 --> ... /> ``` 此外,`ImageView`还支持添加点击事件监听器,可以实现点击...
本文将深入探讨如何在Android中实现ImageView的图片缩放功能,同时结合异步加载和Activity的半透明效果,提升用户体验。 首先,我们要理解Android中ImageView的基本用法。ImageView可以设置为固定大小或根据图片...
在Android开发中,有时我们需要在ImageView上添加额外的图片,比如在主背景上叠加徽标或者水印。这个过程涉及到图像处理和布局管理,需要掌握一些关键知识点。本篇文章将详细讲解如何在ImageView上指定位置添加图片...
本文将深入探讨如何使用ImageView来显示图片,并介绍如何通过按钮控制图片的切换,实现简单的图片浏览功能。 首先,让我们了解ImageView的基本用法。在Android布局文件中,我们可以创建一个ImageView并设置其属性,...
在实际应用中,我们不仅需要显示本地资源中的图像,还经常需要从网络上加载图片,同时可能还需要根据界面需求动态设置ImageView的尺寸以及实现圆角效果。下面将详细讲解这些知识点。 1. **网络图片加载** Android...
3. `CENTER_INSIDE`:图像居中显示,同时保证图像完全在ImageView内,图像会按比例缩放。 4. `FIT_CENTER`:图像居中并按比例缩放,使得图像的宽度或高度与ImageView相匹配。 5. `FIT_END` 和 `FIT_START`:分别将...
我们可以通过设置ImageView的ScaleType(如CENTER_CROP、FIT_CENTER等)来调整图片在视图中的显示方式,同时可以结合Bitmap的inSampleSize参数来降低加载图片的内存消耗。 此外,对于图片的平移操作,我们需要记录...
android 将Imageview 将view生成图片后保存到本地相册的实现生成图片后保存到本地相册的实现,android 将Imageview生成图片后保存到本地相册的实现 android 将Imageview生成图片后保存到本地相册的实现, 有需要的朋友...
在Android开发中,将网络上的图片加载到ImageView控件中是一项常见的需求。本文将详细介绍如何通过URL获取网络图片并将其显示在ImageView上。我们将使用一个简单的示例来演示这一过程,该示例是从百度官网获取其logo...
本文将深入探讨如何自定义一个ImageView来实现图片的网络获取与适应性缩放,这对于我们处理图片展示,尤其是网络图片,有着非常实用的价值。 首先,我们要明白自定义ImageView的主要目标是解决图片在不同设备和屏幕...
这样,图片既不会被拉伸变形,又能保证在视图中完全可见。具体来说,`fitCenter`会先将图片缩放至适合ImageView大小的比例,然后将其水平和垂直居中。 以下是`fitCenter`模式的实现步骤: 1. 计算图片原始宽高比:...
本文将深入探讨如何通过自定义ImageView来实现图片的缩放功能。在Android的UI设计中,ImageView通常用于显示图像,但默认情况下,它并不支持复杂的交互操作,如平移、缩放等。为了满足这些需求,我们需要对其进行...
在Android开发中,`ImageView`是用于展示图片的常用组件,它允许我们加载本地或网络上的图像,并提供了基本的图片处理功能。当我们需要对图片进行更复杂的操作,如缩放、旋转或者显示加载进度时,就需要自定义`...
在Android开发中,ImageView是用于显示图像的常见组件,它支持本地资源图片、网络图片等多种显示方式。在一些特定需求下,我们可能需要对ImageView进行自定义,以便更好地适应项目需求,例如添加缓存机制、处理加载...
jQuery imageview图片放大插件点击图片拖动放大查看 jQuery imageview图片放大插件点击图片拖动放大查看 jQuery imageview图片放大插件点击图片拖动放大查看 jQuery imageview图片放大插件点击图片拖动放大查看
例如,FIT_XY会按比例拉伸图片以填满整个ImageView,可能导致图片失真;而FIT_CENTER则会保持图片比例,居中显示,可能会有空白区域。 2. **Matrix操作**: 更精细的缩放控制可以通过修改ImageView的Matrix实现。...
在Android开发中,对ImageView中的图片进行圆角处理是一种常见的需求,这不仅能够提升应用的美观度,还能根据不同的场景创造出更加和谐的视觉效果。本文将深入探讨如何使用自定义方法来实现ImageView中图片的圆角...
在Android开发中,ImageView是用于显示图像的常见组件,它广泛应用于各种场景,如应用图标、用户头像或背景图片等。当需要显示网络上的图片时,就需要进行网络请求并将其加载到ImageView中。本教程将详细介绍如何在...
在Android开发中,`ImageView` 是一个非常常用的组件,它用于显示图像资源,如本地图片或网络图片。在本案例中,我们关注的是一个特殊功能的`ImageView`,它可以动态改变图片的亮度,使得用户可以通过点击来调整图片...