導航:首頁 > 操作系統 > android圖片輪換

android圖片輪換

發布時間:2024-04-12 04:54:44

android實現圖庫功能,查看本應用drawable下的所有圖片,且能左右滑動切換上一頁或下一頁圖片

使用ImageLoader
源碼地址
https://github.com/nostra13/Android-Universal-Image-Loader
可以通過這個框架來載入以下類型的圖片
"http://site.com/image.png" // from Web
"file:///mnt/sdcard/image.png" // from SD card
"file:///mnt/sdcard/video.mp4" // from SD card (video thumbnail)
"content://media/external/images/media/13" // from content provider
"content://media/external/video/media/13" // from content provider (video thumbnail)
"assets://image.png" // from assets
"drawable://" + R.drawable.img // from drawables (non-9patch images)

官網有例子,使用非常簡單,一行代碼搞定

❷ 安卓代碼中,我有五張圖片,設置一個button,如何點擊一次button就切換下一張圖片

第一種:使用動畫的方法實現:(代碼繁瑣)
這種發放需要:兩個動畫效果,一個布局,一個主類來實現,不多說了,來看代碼吧:
public class IamgeTrActivity extends Activity {
/** Called when the activity is first created. */

public ImageView imageView;
public ImageView imageView2;

public Animation animation1;
public Animation animation2;

public TextView text;

public boolean juage = true;

public int images[] = new int[] { R.drawable.icon, R.drawable.expriment,
R.drawable.changer, R.drawable.dataline, R.drawable.preffitication };

public int count = 0;

public Handler handler = new Handler();

public Runnable runnable = new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
AnimationSet animationSet1 = new AnimationSet(true);
AnimationSet animationSet2 = new AnimationSet(true);
imageView2.setVisibility(0);
TranslateAnimation ta = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,
-1f, Animation.RELATIVE_TO_SELF, 0f,
Animation.RELATIVE_TO_SELF, 0f);
ta.setDuration(2000);
animationSet1.addAnimation(ta);
animationSet1.setFillAfter(true);
ta = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 1.0f,
Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,
0f, Animation.RELATIVE_TO_SELF, 0f);
ta.setDuration(2000);
animationSet2.addAnimation(ta);
animationSet2.setFillAfter(true);
//iamgeView 出去 imageView2 進來
imageView.startAnimation(animationSet1);
imageView2.startAnimation(animationSet2);
imageView.setBackgroundResource(images[count % 5]);
count++;
imageView2.setBackgroundResource(images[count % 5]);

text.setText(String.valueOf(count));
if (juage)
handler.postDelayed(runnable, 6000);
Log.i(handler, handler);
}
};

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imageView = (ImageView) findViewById(R.id.imageView);
imageView2 = (ImageView) findViewById(R.id.imageView2);
text=(TextView)findViewById(R.id.text);
text.setText(String.valueOf(count));
//將iamgeView先隱藏,然後顯示
imageView2.setVisibility(4);
handler.postDelayed(runnable, 2000);
}

public void onPause() {
juage = false;
super.onPause();
}
}

布局代碼:

android:orientation=vertical
android:layout_width=fill_parent
android:layout_height=fill_parent
android:id=@+id/rl>

android:id=@+id/imageView
android:layout_width=fill_parent
android:background=@drawable/icon
android:layout_below=@+id/rl
android:layout_height=120dp />

android:id=@+id/imageView2
android:layout_width=fill_parent
android:background=@drawable/expriment
android:layout_below=@+id/rl
android:layout_height=120dp />

android:id=@+id/text
android:layout_width=fill_parent
android:layout_height=wrap_content
android:layout_below=@id/imageView/>

第二種:使用ViewFlipper實現圖片的輪播

Android系統自帶的一個多頁面管理控制項,它可以實現子界面的自動切換:
首先 需要為ViewFlipper加入View
(1) 靜態導入:在layout布局文件中直接導入
(2) 動態導入:addView()方法
ViewPlipper常用方法:
setInAnimation:設置View進入屏幕時候使用的動畫
setOutAnimation:設置View退出屏幕時候使用的動畫
showNext:調用該函數來顯示ViewFlipper裡面的下一個View
showPrevious:調用該函數來顯示ViewFlipper裡面的上一個View
setFlipInterval:設置View之間切換的時間間隔
startFlipping使用上面設置的時間間隔來開始切換所有的View,切換會循環進行
stopFlipping:停止View切換
講了這么多,那麼我們今天要實現的是什麼呢?
(1) 利用ViewFlipper實現圖片的輪播
(2) 支持手勢滑動的ViewFlipper
我們需要先准備幾張圖片:把圖片放進drawable中
創建兩個動畫:在res下面新建一個folder裡面新建兩個xml:
left_in:

android:ration=5000
android:fromXDelta=100%p
android:toXDelta=0/>

left_out:

android:fromXDelta=0
android:toXDelta=-100%p
android:ration=5000/>

一個布局文件:
xmlns:tools=http://schemas.android.com/tools
android:layout_width=match_parent
android:layout_height=match_parent
tools:context=.MainActivity >

android:id=@+id/flipper
android:layout_width=fill_parent
android:layout_height=fill_parent/>

一個主類:
public class MainActivity extends Activity {

private ViewFlipper flipper;
private int[] resId = {R.drawable.pc1,R.drawable.pc2,R.drawable.pc3,R.drawable.pc4};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

flipper = (ViewFlipper) findViewById(R.id.flipper);

/*
* 動態導入的方式為ViewFlipper加入子View
* */
for (int i = 0; i < resId.length; i++) {
flipper.addView(getImageView(resId[i]));

}
/*
* 為ViewFlipper去添加動畫效果
* */
flipper.setInAnimation(this, R.anim.left_in);
flipper.setOutAnimation(this, R.anim.left_out);
flipper.setFlipInterval(5000);
flipper.startFlipping();
}
private ImageView getImageView(int resId){
ImageView image = new ImageView(this);
image.setBackgroundResource(resId);
return image;
}

}
那麼這樣就實現了一個圖片輪詢的功能效果了
我們還可以添加點擊,滑動效果:
我們還需要添加兩個向右的滑動效果:
right_in:

android:fromXDelta=0
android:toXDelta=-100%p
android:ration=2000/>

right_out:

android:fromXDelta=100%p
android:toXDelta=0
android:ration=2000/>

然後我們還需要在主類裡面添加(如果你不想讓圖片自動播放,只想通過手勢來實現圖片播放那麼你需要把「為ViewFlipper添加動畫效果的代碼」刪掉):
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
break;
case MotionEvent.ACTION_MOVE://判斷向左滑動還是向右滑動
if (event.getX() - startX > 100) {
flipper.setInAnimation(this, R.anim.left_in);
flipper.setOutAnimation(this, R.anim.left_out);
flipper.showPrevious();
}else if (startX - event.getX() > 100) {
flipper.setInAnimation(this, R.anim.right_in);
flipper.setOutAnimation(this, R.anim.right_out);
flipper.showNext();
}

case MotionEvent.ACTION_UP:
break;

}
return super.onTouchEvent(event);
}
這樣我們利用我們的ViewFlipper完成的圖片輪詢的功能就做完了。
午夜神器APP私密即時語音互動聊天,匿名兩性情趣秘密分享

❸ Android自定義控制項之可平移、縮放、旋轉圖片控制項

先上效果圖

源碼

單點拖動圖片對圖片進行平移操作。雙手縮放圖片大小和旋轉圖片到一定的角度。圖片縮放的時候 不能大於最大的縮放因子和小於最小的縮放因子。大於最大縮放因子或者小於最小縮放因子需要對圖像進行回彈。圖片旋轉的角度只能為90度的倍數,不滿足90度要進行回彈。圖片回彈要一個漸變的效果。

大體思路: 首先,Android中提供了Matrix類可以對圖像進行處理。其次,要顯示一張圖片最容易想到的就是ImageView。回彈要求漸變的過程,可以通過屬性動畫進行設置。所以大體的思路是:繼承ImageView,重寫onTouchEvent()方法,判斷事件類型,在對應的事件使用Matrix對圖像進行變換。
Matrix是一個已經封裝好的矩陣,最重要的作用就是對坐標點進行變換。
舉個栗子:
1.某個點(x0,y0,1)通過單位矩陣E映射得到的點還是(x0,y0,1)。

3.點(x0,y0,1)通過矩陣T映射得到的點就會做如下的變換

可以看到點(x0,y0,1)經過T矩陣在x軸方向上平移了dx,在y軸方向上平移了dy。

通過以上的變換可以得到具體的思路: 我們維護一個圖像對應的矩陣mCurrentMatrix,該矩陣主要是對ImageView中的圖像的各個點進行映射。ImageView在容器位置擺放完成之後,置mCurrentMatrix矩陣為單位矩陣。當onTouchEvent()方法中觸發單點觸控並且手指進行平移的時候,調用矩陣mCurrentMatrix的postTranslate(dx,dy),對mCurrentMatrix進行變換。當手指抬起,利用變換結束後的矩陣對圖像的各個點進行映射,從而得到平移變換後的圖像。同理可得,在兩只手指進行縮放旋轉的時候,我們對矩陣mCurrentMatrix進行各種變換,當縮放旋轉的事件結束再利用變換完的矩陣去映射圖像的各個點,從而得到縮放、旋轉後的圖像。

安卓自定義View進階 - Matrix原理
安卓自定義View進階 - Matrix詳解

首先理清事件的邏輯:

初始化圖像大小和位置

縮放圖像大小和控制項大小自適應,平移圖像中心和控制項中心重合

onTouchEvent()函數

平移操作

將圖像對應的矩陣進行變換。

縮放操作

mBoundRectF為記錄圖像邊界的矩形。縮放的時候選取圖像的中心進行縮放。

旋轉操作

旋轉的時候旋轉的旋轉中心也是圖像的中心

圖像中各個點的映射

調用ImageView的setImageMatrix(Matrix matrix)會讓ImageView根據設置的matrix去重新繪制圖像。

更新圖像的矩形邊界

獲得圖像的矩形,並根據矩陣映射矩形各個點的坐標。

縮放回彈

旋轉回彈

一些計算方法

要求圖像的變換是一個漸變的過程,很容易想到的就是屬性動畫。因為屬性動畫本身就是對值進行不斷set的過程。而我們維護的矩陣也是一個值,所以很自然可以想到,如果得到回彈之前的矩陣的值以及回彈之後矩陣的值,就可以根據動畫監聽器中動畫當前的系數值去改變矩陣的值。

對animator對象設置完監聽器之後,就可以在手指抬起的時候調用屬性動畫的start()方法開啟動畫。

自定義可平移、縮放、旋轉的控制項主要點有兩個方面:一是onTouchEvent()中判斷平移、旋轉、縮放的觸發條件,平移位移量、縮放比例因子、旋轉角度的計算。二是Matrix矩陣的應用。

❹ android怎麼實現一張圖片旋轉幾秒後後自動換到另一張圖片

圖片旋轉使用動畫,設置動畫時間,旋轉完成後,設置另一張圖片

RotateAnimation 動畫,
RotateAnimation (float fromDegrees, float toDegrees, int
pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
參數說明:

float fromDegrees:旋轉的開始角度。
float toDegrees:旋轉的結束角度。
int
pivotXType:X軸的伸縮模式,可以取值為ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
float
pivotXValue:X坐標的伸縮值。
int
pivotYType:Y軸的伸縮模式,可以取值為ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
float
pivotYValue:Y坐標的伸縮值。

❺ 在Android里怎麼讓一張png圖片循環旋轉,就像雷達裡面那個,不停地旋轉,可以有按鈕控制開關的

使用android中的旋轉動畫,讓imageview以自身為中心旋轉,在寫個Button控制動畫的開始結束

可參考:http://blog.csdn.net/feng88724/article/details/6318430

❻ android怎麼viewpager實現循環切換圖片

Android中的ViewPager則實現了左右滑動的效果,ViewPager類提供了多界面切換的新效果。利用ViewPager實現圖片循環滾動代碼如下:

1、首先是布局文件,使用了一個ViewPager控制項:

java"><spanstyle="padding:0px;margin:0px;font-size:14px;"><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/viewpager"
android:background="#33000000"
android:orientation="vertical"
android:padding="5dip">
<TextView
android:id="@+id/tv_image_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="第一個引導頁面"
android:textColor="@android:color/white"
android:textSize="14sp"/>
<LinearLayout
android:id="@+id/ll_points"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dip"
android:layout_gravity="center_horizontal"
android:orientation="horizontal">
</LinearLayout>
</LinearLayout>
</RelativeLayout></span>

2、接下來實現一個繼承PagerAdapter的MyAdapter類,實現一個PagerAdapter,代碼如下:

<spanstyle="padding:0px;margin:0px;font-size:14px;">packagecom.example.viewpagertest;
importjava.util.List;
importandroid.support.v4.view.PagerAdapter;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.ImageView;
{
privateList<ImageView>mImageViewList;
publicViewPagerAdapter(List<ImageView>imageViewList){
super();
this.mImageViewList=imageViewList;
}
/**
*該方法將返回所包含的Item總個數。為了實現一種循環滾動的效果,返回了基本整型的最大值,這樣就會創建很多的Item,
*其實這並非是真正的無限循環。
*/
@Override
publicintgetCount(){
returnInteger.MAX_VALUE;
}
/**
*判斷出去的view是否等於進來的view如果為true直接復用
*/
@Override
publicbooleanisViewFromObject(Viewarg0,Objectarg1){
returnarg0==arg1;
}
/**
*銷毀預載入以外的view對象,會把需要銷毀的對象的索引位置傳進來,就是position,
*因為mImageViewList只有五條數據,而position將會取到很大的值,
*所以使用取余數的方法來獲取每一條數據項。
*/
@Override
publicvoiddestroyItem(ViewGroupcontainer,intposition,Objectobject){
container.removeView(mImageViewList.get(position%mImageViewList.size()));
}
/**
*創建一個view,
*/
@Override
publicObjectinstantiateItem(ViewGroupcontainer,intposition){
container.addView(mImageViewList.get(position%mImageViewList.size()));
returnmImageViewList.get(position%mImageViewList.size());
}
}
</span>

3、最後是主界面部分的代碼:

<spanstyle="padding:0px;margin:0px;font-size:14px;">packagecom.example.viewpagertest;
importjava.util.ArrayList;
importjava.util.List;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.os.SystemClock;
importandroid.support.v4.view.ViewPager;
importandroid.support.v4.view.ViewPager.OnPageChangeListener;
importandroid.view.View;
importandroid.widget.ImageView;
importandroid.widget.LinearLayout;
importandroid.widget.LinearLayout.LayoutParams;
importandroid.widget.TextView;

{

privateList<ImageView>imageViewList;
privateTextViewtvDescription;
privateLinearLayoutllPoints;
privateString[]imageDescriptions;
=0;
privateViewPagermViewPager;
privatebooleanisLoop=true;
privateHandlerhandler=newHandler(){

@Override
publicvoidhandleMessage(Messagemsg){
super.handleMessage(msg);

mViewPager.setCurrentItem(mViewPager.getCurrentItem()+1);
}
};

@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setView();
initView();
}

publicvoidsetView(){
setContentView(R.layout.activity_splash_viewpager);

//自動切換頁面功能
newThread(newRunnable(){

@Override
publicvoidrun(){
while(isLoop){
SystemClock.sleep(2000);
handler.sendEmptyMessage(0);
}
}
}).start();
}

publicvoidinitView(){
mViewPager=(ViewPager)findViewById(R.id.viewpager);
tvDescription=(TextView)findViewById(R.id.tv_image_description);
llPoints=(LinearLayout)findViewById(R.id.ll_points);

prepareData();

ViewPagerAdapteradapter=newViewPagerAdapter(imageViewList);
mViewPager.setAdapter(adapter);
mViewPager.setOnPageChangeListener(this);

tvDescription.setText(imageDescriptions[previousSelectPosition]);
llPoints.getChildAt(previousSelectPosition).setEnabled(true);

/**
*2147483647/2=1073741820-1
*設置ViewPager的當前項為一個比較大的數,以便一開始就可以左右循環滑動
*/
intn=Integer.MAX_VALUE/2%imageViewList.size();
intitemPosition=Integer.MAX_VALUE/2-n;

mViewPager.setCurrentItem(itemPosition);
}

privatevoidprepareData(){
imageViewList=newArrayList<ImageView>();
int[]imageResIDs=getImageResIDs();
imageDescriptions=getImageDescription();

ImageViewiv;
Viewview;
for(inti=0;i<imageResIDs.length;i++){
iv=newImageView(this);
iv.setBackgroundResource(imageResIDs[i]);
imageViewList.add(iv);

//添加點view對象
view=newView(this);
view.setBackgroundDrawable(getResources().getDrawable(R.drawable.point_background));
LayoutParamslp=newLayoutParams(5,5);
lp.leftMargin=10;
view.setLayoutParams(lp);
view.setEnabled(false);
llPoints.addView(view);
}
}

privateint[]getImageResIDs(){
returnnewint[]{
R.drawable.bg1,
R.drawable.bg2,
R.drawable.bg3,
R.drawable.pic_01,
R.drawable.pic_02
};
}

privateString[]getImageDescription(){
returnnewString[]{
"第一個引導頁面",
"第二個引導頁面",
"第三個引導頁面",
"第四個引導頁面",
"第五個引導頁面"
};
}
@Override
(intarg0){

}
@Override
publicvoidonPageScrolled(intarg0,floatarg1,intarg2){

}
@Override
publicvoidonPageSelected(intposition){
//改變圖片的描述信息
tvDescription.setText(imageDescriptions[position%imageViewList.size()]);
//切換選中的點,把前一個點置為normal狀態
llPoints.getChildAt(previousSelectPosition).setEnabled(false);
//把當前選中的position對應的點置為enabled狀態
llPoints.getChildAt(position%imageViewList.size()).setEnabled(true);
previousSelectPosition=position%imageViewList.size();
}
@Override
protectedvoidonDestroy(){
super.onDestroy();
isLoop=false;
}
}
</span>

❼ android 界面中,點擊一張圖片,怎樣使得界面上這張圖片切換為另一張圖片。

即使樓主沒有用layout的xml文件。但還是要聲明實例化一個View去展示畫布,以及在Activity的setContentView(view)方法中傳入。 這樣,樓主是肯定可以得到這個View的對象的。
方法一:直接添加OnclickListener
view.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// 在這里切換另一張圖片
}
});
方法二:自定義一個view.繼承android.view.View.並復寫View的onTouchEvent()方法。
@Override
public boolean onTouchEvent(MotionEvent event)
{
//獲取拖動事件的發生位置
float x = event.getX();
float y = event.getY();
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:

break;
case MotionEvent.ACTION_MOVE:

break;
case MotionEvent.ACTION_UP:

break;
}
invalidate();// 申請重繪
return true;
}
@Override
public void onDraw(Canvas canvas)
{
//.....你要繪制的另一張圖片
canvas.drawPath(path, paint);
}

❽ android 圖片旋轉

Android UI之ImageView旋轉的幾種方式

Bitmap bitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.ic_launcher)).getBitmap();
Matrix matrix = new Matrix();
matrix.setRotate(90);
Bitmap new = Bitmap.create(bitmap,0,bitmap.getWidth(),0,bitmap.getHeight(),matrix);
image.setBitmapResource(bitmap);
如果程序不斷獲取新的bitmap重新設置給ImageView的話,那麼bitmap在不斷旋轉,又不回收內存,浪費大大噠,不推薦使用。

可以通過在xml中設置ImageView的屬性來實現,如

android:rotation="90" //寫死固定方向沒問題
,這樣。
動態調用如下:

iv.setPivotX(image.getWidth()/2);
iv.setPivotY(image.getHeight()/2);//支點在圖片中心
iv.setRotation(90);

可以使用ImageView配合屬性動畫實現,如
iv.animate().rotation(90); //會好看一下,只有第一次載入時是這樣的

或者普通動畫
Animation rotateAnimation = new RotateAnimation(lastAngle, progress, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 1);
rotateAnimation.setFillAfter(true);
rotateAnimation.setDuration(50);
rotateAnimation.setRepeatCount(0);
rotateAnimation.setInterpolator(new LinearInterpolator());
rotateImage.startAnimation(rotateAnimation);

Matrix matrix=new Matrix();
rotateImage.setScaleType(ScaleType.MATRIX); //required
matrix.postRotate((float) progress, pivotX, pivotY);
iv.setImageMatrix(matrix);

閱讀全文

與android圖片輪換相關的資料

熱點內容
java課表 瀏覽:555
如何在pdf裡面修改 瀏覽:929
橙光製作器檔案框在哪個文件夾 瀏覽:991
php如何抓取網頁數據 瀏覽:642
計數器單片機 瀏覽:966
游戲aoi演算法 瀏覽:844
phpmysqlint 瀏覽:912
怎麼從appstore商城買東西 瀏覽:184
大秀直播平台源碼 瀏覽:424
java視屏 瀏覽:934
電腦中如何給程序加密 瀏覽:240
java排序容器 瀏覽:942
職稱證書在哪個app下載 瀏覽:362
四九演算法算男女 瀏覽:659
javawindows8 瀏覽:498
2021世界程序員節 瀏覽:485
php翼支付 瀏覽:884
盈通伺服器ip地址 瀏覽:791
3des演算法的c語言實現 瀏覽:875
網上怎樣購買伺服器地址 瀏覽:815