當前位置:首頁 » 安卓系統 » android圖片效果

android圖片效果

發布時間: 2023-01-11 23:27:41

⑴ android 圖片像水一樣流動效果是怎麼實現的

相關實現邏輯如下:
activity_main.xml

[html] view plain
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageView
android:id="@+id/wave1"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_centerInParent="true"
android:background="@drawable/wave"
/>

<ImageView
android:id="@+id/wave2"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_centerInParent="true"
android:background="@drawable/wave"/>

<ImageView
android:id="@+id/wave3"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_centerInParent="true"
android:background="@drawable/wave" />

<ImageView
android:id="@+id/normal"
android:layout_width="166dp"
android:layout_height="166dp"
android:layout_centerInParent="true"
android:background="@drawable/normal" />

</RelativeLayout>
MainActivity.java

[java] view plain
package com.jackie.waveanimation;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.AnimationSet;
import android.view.animation.ScaleAnimation;
import android.widget.ImageView;

public class MainActivity extends Activity {
private ImageView mNormal, mWave1, mWave2, mWave3;

private AnimationSet mAnimationSet1, mAnimationSet2, mAnimationSet3;

private static final int OFFSET = 600; //每個動畫的播放時間間隔
private static final int MSG_WAVE2_ANIMATION = 2;
private static final int MSG_WAVE3_ANIMATION = 3;

private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_WAVE2_ANIMATION:
mWave2.startAnimation(mAnimationSet2);
break;
case MSG_WAVE3_ANIMATION:
mWave3.startAnimation(mAnimationSet3);
break;
}
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mNormal = (ImageView) findViewById(R.id.normal);
mWave1 = (ImageView) findViewById(R.id.wave1);
mWave2 = (ImageView) findViewById(R.id.wave2);
mWave3 = (ImageView) findViewById(R.id.wave3);

mAnimationSet1 = initAnimationSet();
mAnimationSet2 = initAnimationSet();
mAnimationSet3 = initAnimationSet();

mNormal.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
showWaveAnimation();
break;
case MotionEvent.ACTION_UP:
clearWaveAnimation();
break;
case MotionEvent.ACTION_CANCEL:
clearWaveAnimation();
}
return true;
}
});
}

private AnimationSet initAnimationSet() {
AnimationSet as = new AnimationSet(true);
ScaleAnimation sa = new ScaleAnimation(1f, 2.3f, 1f, 2.3f,
ScaleAnimation.RELATIVE_TO_SELF, 0.5f,
ScaleAnimation.RELATIVE_TO_SELF, 0.5f);
sa.setDuration(OFFSET * 3);
sa.setRepeatCount(Animation.INFINITE);// 設置循環
AlphaAnimation aa = new AlphaAnimation(1, 0.1f);
aa.setDuration(OFFSET * 3);
aa.setRepeatCount(Animation.INFINITE);//設置循環
as.addAnimation(sa);
as.addAnimation(aa);
return as;
}

private void showWaveAnimation() {
mWave1.startAnimation(mAnimationSet1);
mHandler.sendEmptyMessageDelayed(MSG_WAVE2_ANIMATION, OFFSET);
mHandler.sendEmptyMessageDelayed(MSG_WAVE3_ANIMATION, OFFSET * 2);
}

private void clearWaveAnimation() {
mWave1.clearAnimation();
mWave2.clearAnimation();
mWave3.clearAnimation();
}
}

⑵ Android 實現圓角布局,變相實現圓角圖片效果(不同位置不同弧度)

    小菜最近在處理圖片的圓角,不止是四個角全是圓角,還包括單左側/單右側/對角線方向的圓角。因為自己太菜只能尋求網上的大神,發現一個自定義圓角布局,這樣可以變相的解決我的需求,還可以實現更多的圓角效果,不僅是圖片,還包括其他布局。
    小菜我作為伸手黨,非常感謝大神的分享,參考原文 RoundAngleFrameLayout 。
    這個布局實現方式很簡單,大神只提供了默認的四個圓角,這里我添加了一些方法可以動態的設置圓角的位置與弧度,並說明一下小菜遇到的小問題。小菜根據大神的總結自定義了一個 MyRoundLayout GitHub 布局樣式。

Tips:

⑶ Android圖片輪播效果的幾種實現方法

<!DOCTYPEhtml>
<html>

<head>
<metacharset="utf-8">
<title>HelloMUI</title>
<metaname="viewport"content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
<metaname="apple-mobile-web-app-capable"content="yes">
<metaname="apple-mobile-web-app-status-bar-style"content="black">

<!--標准mui.css-->
<linkrel="stylesheet"href="../css/mui.min.css">
<!--App自定義的css-->
<linkrel="stylesheet"type="text/css"href="../css/app.css"/>
</head>

<body>
<headerclass="mui-barmui-bar-nav">
<aclass="mui-action-backmui-iconmui-icon-left-navmui-pull-left"></a>
<h1class="mui-title">下方懸浮標題</h1>
</header>
<divclass="mui-content">
<ulclass="mui-table-viewmui-table-view-chevron">
<liid="switch"class="mui-table-view-cell">
定時輪播
<!--<divclass="mui-switch">
<divclass="mui-switch-handle"></div>
</div>-->
</li>
</ul>
<divid="slider"class="mui-slider">
<divclass="mui-slider-groupmui-slider-loop">
<!--額外增加的一個節點(循環輪播:第一個節點是最後一張輪播)-->
<divclass="mui-slider-itemmui-slider-item-plicate">
<ahref="#">
<imgsrc="../images/yuantiao.jpg">
<pclass="mui-slider-title">靜靜看這世界</p>
</a>
</div>
<divclass="mui-slider-item">
<ahref="#">
<imgsrc="../images/shuijiao.jpg">
<pclass="mui-slider-title">幸福就是可以一起睡覺</p>
</a>
</div>
<divclass="mui-slider-item">
<ahref="#">
<imgsrc="../images/muwu.jpg">
<pclass="mui-slider-title">想要一間這樣的木屋,靜靜的喝咖啡</p>
</a>
</div>
<divclass="mui-slider-item">
<ahref="#">
<imgsrc="../images/cbd.jpg">
<pclass="mui-slider-title">ColorofSIPCBD</p>
</a>
</div>
<divclass="mui-slider-item">
<ahref="#">
<imgsrc="../images/yuantiao.jpg">
<pclass="mui-slider-title">靜靜看這世界</p>
</a>
</div>
<!--額外增加的一個節點(循環輪播:最後一個節點是第一張輪播)-->
<divclass="mui-slider-itemmui-slider-item-plicate">
<ahref="#">
<imgsrc="../images/shuijiao.jpg">
<pclass="mui-slider-title">幸福就是可以一起睡覺</p>
</a>
</div>
</div>
<divclass="mui-slider-indicatormui-text-right">
<divclass="mui-indicatormui-active"></div>
<divclass="mui-indicator"></div>
<divclass="mui-indicator"></div>
<divclass="mui-indicator"></div>
</div>
</div>
</div>
</body>
<scriptsrc="../js/mui.min.js"></script>
<script>
// alert("!!!!!");
varslider=mui("#slider");
slider.slider({
interval:5000
});

</script>
</html>


⑷ android 如何重寫imageview 讓圖片有圓角效果

android 自定義圓角ImageView以及鋸齒的處理

看到很多人開發過程中要使用圓角圖片時,解決方法有:


1.重新繪制一張圖片


2.通過布局來配置


3.通過重寫View來實現


其中1,2在這里就不講了,重點講講方法三的實現。



實現一:通過截取畫布一個圓形區域與圖片的相交部分進行繪制,缺點:鋸齒明顯,設置Paint,Canvas抗鋸齒無效。

package com.open.circleimageview.widget;


import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.Canvas;

import android.graphics.Paint;

import android.graphics.PaintFlagsDrawFilter;

import android.graphics.Path;

import android.graphics.Rect;

import android.graphics.Region;

import android.util.AttributeSet;

import android.view.View;


public class CircleImageViewA extends View {


public CircleImageViewA(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}


public CircleImageViewA(Context context, AttributeSet attrs) {

super(context, attrs);

}


public CircleImageViewA(Context context) {

super(context);

}


private Bitmap bitmap;

private Rect bitmapRect=new Rect();

private PaintFlagsDrawFilter pdf=new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);

private Paint paint = new Paint();

{

paint.setStyle(Paint.Style.STROKE);

paint.setFlags(Paint.ANTI_ALIAS_FLAG);

paint.setAntiAlias(true);// 設置畫筆的鋸齒效果。 true是去除,大家一看效果就明白了

}

private Path mPath=new Path();

public void setImageBitmap(Bitmap bitmap)

{

this.bitmap=bitmap;

}

@Override

protected void onDraw(Canvas canvas) {


if(null==bitmap)

{

return;

}

bitmapRect.set(0, 0, getWidth(), getHeight());

canvas.save();

canvas.setDrawFilter(pdf);

mPath.reset();

canvas.clipPath(mPath); // makes the clip empty

mPath.addCircle(getWidth()/2, getWidth()/2, getHeight()/2, Path.Direction.CCW);

canvas.clipPath(mPath, Region.Op.REPLACE);

canvas.drawBitmap(bitmap, null, bitmapRect, paint);

canvas.restore();

}

}


實現二:通過PorterDuffXfermode 方式(注意要設置硬體加速,否則部分機子無效),優點:鋸齒基本沒有

package com.open.circleimageview.widget;


import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.PaintFlagsDrawFilter;

import android.graphics.PorterDuff;

import android.graphics.PorterDuffXfermode;

import android.graphics.Rect;

import android.graphics.RectF;

import android.util.AttributeSet;

import android.view.View;


public class CircleImageViewB extends View {


public CircleImageViewB(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

init();

}


public CircleImageViewB(Context context, AttributeSet attrs) {

super(context, attrs);

init();

}


public CircleImageViewB(Context context) {

super(context);

init();

}


private Bitmap bitmap;

private Rect bitmapRect=new Rect();

private PaintFlagsDrawFilter pdf=new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);

private Paint paint = new Paint();

{

paint.setStyle(Paint.Style.STROKE);

paint.setFlags(Paint.ANTI_ALIAS_FLAG);

paint.setAntiAlias(true);// 設置畫筆的鋸齒效果。 true是去除,大家一看效果就明白了

}

private Bitmap mDstB=null;

private PorterDuffXfermode xfermode=new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY);

private void init()

{

try {

if(android.os.Build.VERSION.SDK_INT>=11)

{

setLayerType(LAYER_TYPE_SOFTWARE, null);

}

} catch (Exception e) {

e.printStackTrace();

}

}

public void setImageBitmap(Bitmap bitmap)

{

this.bitmap=bitmap;

}


private Bitmap makeDst(int w, int h)

{

Bitmap bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);

Canvas c = new Canvas(bm);

Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);

p.setColor(Color.parseColor("#ffffffff"));

c.drawOval(new RectF(0, 0, w, h), p);

return bm;

}

@Override

protected void onDraw(Canvas canvas) {


if(null==bitmap)

{

return;

}

if(null==mDstB)

{

mDstB=makeDst(getWidth(), getHeight());

}


bitmapRect.set(0, 0, getWidth(), getHeight());

canvas.save();

canvas.setDrawFilter(pdf);

canvas.drawBitmap(mDstB, 0, 0, paint);

paint.setXfermode(xfermode);

canvas.drawBitmap(bitmap, null, bitmapRect, paint);

paint.setXfermode(null);

canvas.restore();

}

}


⑸ Android圖片載入及虛化效果

[TOC]

使用如下方式載入圖片

會導致OOM,android對於直接通過資源id載入的資源需做cache,下次再需要此資源的時候直接從cache中得到。但這樣做也造成了用過的資源都會在內存中,這樣的設計不是很適合使用了很多大圖片資源的應用,這樣累積下來應用的內存峰值是很高的。

當使用諸如
imageView.setBackgroundResource
imageView.setImageResource
BitmapFactory.decodeResource
這樣的方法來設置一張大圖片時,在完成decode後,最終都是通過java層的createBitmap來完成的,需要消耗更多內存。因此,改用先通過BitmapFactory.decodeStream方法,創建出一個bitmap,再將其設為ImageView的 source,decodeStream最大的秘密在於其直接調用JNI>>nativeDecodeAsset()來完成decode,無需再使用java層的createBitmap,從而節省了java層的空間。如果在讀取時加上圖片的Config參數,可以有效減少載入的內存,從而有效阻止拋OOM異常。

實際使用中,可以針對bitmap做如下操作

RenderScript是Google在API11中引入的類,可看作業android內置的圖片處理框架(區別於Glide等圖片處理框架,RenderScript注重於圖片的處理而不是載入)。RenderScript實際操作基於RenderScript Intrinsics,一些可以幫助RenderScript快速實現各種圖片處理的操作類。該類包含諸多操作功能,比如利用ScriptIntrinsicBlur,就可以簡單高效地實現高斯模糊效果,可通過參數radius設置虛化的程度。

1920*1080的原始圖片未經壓縮讀取時間可能會超過1s,使用該圖片作為背景圖片載入時會有明顯的卡頓。此時就需要設置BitmapFactory.Options實現對待載入圖片的壓縮。可參照 https://blog.csdn.net/u012124438/article/details/66087785 逐步優化Bitmap載入。對於載入圖片較多較頻繁的功能,建議使用第三方的圖片載入框架,如Glide或者Picasso。

需要注意的是,此處doBlur有兩個重載,可根據需要設置圖片的縮放比例.這種方式和前文通過BitmapFactory.Options設置Bitmap取樣格式的效果是一致的,都是為了減小Bitmap載入的資源消耗,提高載入效率。

⑹ android 圖片效果如何實現

gallyery不行嗎?

⑺ Android 圖片及文字模糊效果

implementation'com.github.bumptech.glide:glide:4.7.1'

implementation'jp.wasabeef:glide-transformations:4.0.1'

Glide.with(this).load(url)

.apply(RequestOptions.bitmapTransform(new BlurTransformation(5,2)))

.into(civ);

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){

//View從API Level 11才加入setLayerType方法 //設置View以軟體渲染模式繪圖

    tvPhone.setLayerType(View.LAYER_TYPE_SOFTWARE,null);

}

SpannableString stringBuilder=new SpannableString("文字模糊");

stringBuilder.setSpan(new MaskFilterSpan(new BlurMaskFilter(10f,BlurMaskFilter.Blur.NORMAL)),

0,stringBuilder.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

tvPhone.setText(stringBuilder);

最後來張效果圖吧:

熱點內容
g92編程 發布:2025-05-17 21:00:31 瀏覽:170
匯編語言第三版腳本之家 發布:2025-05-17 20:54:26 瀏覽:399
資源配置最佳狀態叫什麼 發布:2025-05-17 20:48:58 瀏覽:84
定義dns伺服器的ip 發布:2025-05-17 20:32:37 瀏覽:954
android判斷圖片 發布:2025-05-17 20:32:33 瀏覽:833
安卓12什麼時候適配小米 發布:2025-05-17 20:31:47 瀏覽:71
c語言字元串初始化 發布:2025-05-17 20:18:43 瀏覽:37
安卓融e聯推送需要什麼許可權 發布:2025-05-17 20:18:39 瀏覽:269
我的世界無限武魂伺服器 發布:2025-05-17 20:17:09 瀏覽:372
安卓手游腳本語言 發布:2025-05-17 19:53:07 瀏覽:22