android動態載入圖片
① android動態載入view一個一個刷新怎麼實現
先看一下結構圖
可以看到ViewSwitcher和ViewFlipper都是繼承自ViewAnimator。
下面通過一個Demo了解一下ViewFlipper的用法
main.xml
Html代碼
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="htt p:/ /schemas.andro id.co m/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ViewFlipper
android:id="@+id/viewFlipper"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<include
android:id="@+id/layout01"
layout="@layout/layout01" />
<include
android:id="@+id/layout02"
layout="@layout/layout02" />
</ViewFlipper>
</LinearLayout>
layout01.xml
Html代碼
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="htt p:/ /schem as.andro id.c om/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:text="一個TextView"
android:textSize="40dip" />
</LinearLayout>
layout02.xml
Html代碼
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="htt p://schema s.andro id.c om/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="一個TextView + 一個ImageView"
android:textSize="20dip" />
</LinearLayout>
</LinearLayout>
ViewFlipperDemoActivity.java
Java代碼
package com.tianjf;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.animation.AnimationUtils;
import android.widget.ViewFlipper;
public class ViewFlipperDemoActivity extends Activity implements
OnTouchListener {
private ViewFlipper viewFlipper;
// 左右滑動時手指按下的X坐標
private float touchDownX;
// 左右滑動時手指松開的X坐標
private float touchUpX;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
viewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper);
viewFlipper.setOnTouchListener(this);
}
}
float XFrom = e1.getX();
float XTo = e2.getX();
float YFrom = e1.getY();
float YTo = e2.getY();
// 左右滑動的X軸幅度大於100,並且X軸方向的速度大於100
if (Math.abs(XFrom - XTo) > 100.0f && Math.abs(speedX) > 100.0f) {
// X軸幅度大於Y軸的幅度
if (Math.abs(XFrom - XTo) >= Math.abs(YFrom - YTo)) {
if (XFrom > XTo) {
// 下一個
mOnFlingListener.flingToNext();
} else {
// 上一個
mOnFlingListener.flingToPrevious();
}
}
} else {
return false;
}
return true;
}
public interface OnFlingListener {
void flingToNext();
void flingToPrevious();
}
}
MyViewFlipper.java
Java代碼
package com.tianjf;
import com.tianjf.MyGestureListener.OnFlingListener;
import android.content.Context;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ViewFlipper;
public class MyViewFlipper extends ViewFlipper implements OnFlingListener {
private GestureDetector mGestureDetector = null;
private OnViewFlipperListener mOnViewFlipperListener = null;
public MyViewFlipper(Context context) {
super(context);
}
public MyViewFlipper(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setOnViewFlipperListener(OnViewFlipperListener mOnViewFlipperListener) {
this.mOnViewFlipperListener = mOnViewFlipperListener;
MyGestureListener myGestureListener = new MyGestureListener();
myGestureListener.setOnFlingListener(this);
mGestureDetector = new GestureDetector(myGestureListener);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (null != mGestureDetector) {
return mGestureDetector.onTouchEvent(ev);
} else {
return super.onInterceptTouchEvent(ev);
}
}
@Override
public void flingToNext() {
if (null != mOnViewFlipperListener) {
int childCnt = getChildCount();
if (childCnt == 2) {
removeViewAt(1);
}
addView(mOnViewFlipperListener.getNextView(), 0);
if (0 != childCnt) {
setInAnimation(getContext(), R.anim.left_slip_in);
setOutAnimation(getContext(), R.anim.left_slip_out);
setDisplayedChild(0);
}
}
}
@Override
public void flingToPrevious() {
if (null != mOnViewFlipperListener) {
int childCnt = getChildCount();
if (childCnt == 2) {
removeViewAt(1);
}
addView(mOnViewFlipperListener.getPreviousView(), 0);
if (0 != childCnt) {
setInAnimation(getContext(), R.anim.right_slip_in);
setOutAnimation(getContext(), R.anim.right_slip_out);
setDisplayedChild(0);
}
}
}
public interface OnViewFlipperListener {
View getNextView();
View getPreviousView();
}
}
ViewFlipperDemoActivity.java
Java代碼
package com.tianjf;
import com.tianjf.MyViewFlipper.OnViewFlipperListener;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ScrollView;
import android.widget.TextView;
public class ViewFlipperDemoActivity extends Activity implements OnViewFlipperListener {
private MyViewFlipper myViewFlipper;
private int currentNumber;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
currentNumber = 1;
myViewFlipper = (MyViewFlipper) findViewById(R.id.myViewFlipper);
myViewFlipper.setOnViewFlipperListener(this);
myViewFlipper.addView(creatView(currentNumber));
}
@Override
public View getNextView() {
currentNumber = currentNumber == 10 ? 1 : currentNumber + 1;
return creatView(currentNumber);
}
@Override
public View getPreviousView() {
currentNumber = currentNumber == 1 ? 10 : currentNumber - 1;
return creatView(currentNumber);
}
private View creatView(int currentNumber) {
LayoutInflater layoutInflater = LayoutInflater.from(this);
ScrollView resultView = (ScrollView) layoutInflater.inflate(R.layout.flipper_view, null);
((TextView) resultView.findViewById(R.id.textView)).setText(currentNumber + "");
return resultView;
}
}
好了,代碼上完了,開始講解!
ViewFilpper的showPrevious()方法和showNext()方法是用來顯示已經在布局文件中定義好了的View,現在我們沒有在布局文件中為ViewFlipper添加View,那麼showPrevious()方法和showNext()方法就不能用了。但是我們怎麼實現滑動來切換View呢?用什麼方法呢?
這時候,我們就要自定義一個MyViewFlipper來監聽滑動事件,並做切換視圖的處理。
你可以讓MyViewFlipper實現OnTouchListener介面,然後實現onTouch方法,然後根據MotionEvent.ACTION_DOWN和MotionEvent.ACTION_UP的坐標判斷是不是滑動事件,就像ImageSwitcher中講解的那樣(htt p://bl og.csd n.n et/tianjf0514/article/details/7556487)
除了自己判斷是不是滑動事件,那麼Android有沒有直接提供哪個方法作為滑動事件的回調函數呢?答案是:提供了。OnGestureListener中的onFling方法就是滑動事件的回調函數。這時候你也許會毫不猶豫的讓MyViewFlipper實現OnGestureListener介面,並復寫onFling方法。這樣做當然可以,不過實現OnGestureListener介面不僅僅要復寫onFling方法,還要復寫其他的方法(onDown()、onShowPress()、onSingleTapUp()、onScroll()、onLongPress()),但是這些回調函數我們不需要,這就造成了垃圾代碼。
為了避免垃圾代碼,Android提供了一個類SimpleOnGestureListener已經實現了OnGestureListener介面和OnDoubleTapListener介面,並復寫了所有方法。那麼我們只要新建一個自己的MyGestureListener.java來繼承SimpleOnGestureListener,並有選擇性的復寫需要的方法(我們在此只復寫onFling方法)。
這時,我們就自定義了一個手勢類,並且這個手勢類會監聽滑動事件來做一些處理。但是我們怎麼利用這個手勢類呢?怎麼利用到MyViewFlipper類中去呢?
關於onFling方法,有一點要注意:不是每個View都能有onFling回調函數,一開始,我的flipper_view.xml布局文件最外層是一個LinearLayout,死活都走不到onFling方法,後來在外層又套了一個ScrollView,就能正常走到OnFling方法裡面了。
可以看到flingToNext方法和flingToPrevious方法裡面會判斷childCnt,如果為2,就removeViewAt(1);,然後再addView(mOnViewFlipperListener.getNextView(), 0);。這就要回顧一下ImageSwitcher的原理,ViewFlipper的原理和ImageSwitcher一樣,有且僅有2個子View,滑動時候就在這兩個子View上來回切換。index為0的就是當前看到的,index為1的就是看不見的。上面代碼的意思就是:當滑動時,必然要新添加一個View,那麼子View的個數有可能大於2,隨意要先判斷一下如果childCnt == 2,那麼就把index == 1的那個View(即看不見的View)給Remove調,然後把新添加的View添加到index == 0處。這樣可以減少內存消耗。
② android 便簽中插入圖片是怎麼實現的
安卓手機要想實現在便簽中插入圖片,可選擇使用敬業簽,敬業簽支持插入圖片,在新建便簽內容時,支持一次性插入10張圖片。
③ android中怎麼使用glide載入動態圖
由於前段時間項目需要,需要在一個頁面上載入根據不同的按鈕載入不同的布局頁面,當時想到用 tabhot 。不過美工提供的界面圖完全用不上tabhot ,所以想到了動態載入的方法來解決這一需求。在這里我整理了一下,寫了一個 DEMO 希望大家以後少走點...
④ android 存在資料庫中的動態圖片,如何讀取出來,顯示在ImageView中
實現的功能為從伺服器獲取圖片數據,在布局頁面上顯示。由於圖片的個數是不確定的,因此採用在布局頁面中定義多個ImageView來顯示圖片是不合理的。
(一)首先定義布局
android:id="@+id/id_layout_movie"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
(二)載入圖片顯示時獲取到布局文件
RelativeLayout rl_Movie = (RelativeLayout) findViewById(R.id.id_layout_movie);
(三)依次循環伺服器獲取的圖片數據,一張一張設置圖片顯示的位置
//newWidth為圖片顯示的寬度,newHeight為圖片顯示的高度
RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams( newWidth, newHeight);
設置lp1.leftMargin和lp1.topMargin的值
(四)最後設置rl_Movie.addView(iv, lp1)將圖片加入布局文件中
⑤ android listView動態載入本地圖片(拍照後載入上去)
調用android自身的相機,在onActivityResult回調函數里寫載入圖片方法
⑥ android中怎麼實現動態設置背景圖片的功能,我在網上搜到的只能設置到當前的頁面,並不能實現設置到全部
當關閉重新運行,它又會自動跳回原始的背景圖片。
在開發過程中,由於使用模擬器測試了程序,在首次運行後會將res文件夾下的圖片資源文件(如drawable-hdpi、drawable-ldpi和drawable-mdpi)拷貝到bin文件夾下。在替換資源圖片後,eclipse並不清楚是否有圖片改變,所以會使用原來bin下的res文件夾中的資源文件進行打包,而圖片用的還是第一次eclipse所拷貝進去的文件,所以當運行程序後會發現替換資源圖片在程序中沒起作用。
解決辦法:每次運行前,清理項目
動態設置背景圖片代碼
privateinti=0;//全局變數定義,初始化
//list數組接收到從文件中讀取到的數據
List<String>list=readTxt.getDierguanResource();
//changeBack這個函數用來動態設置背景圖片
publicvoidchangeBack(intbackground){
main=(LinearLayout)findViewById(R.id.shizi);
Stringa=list.get(background);
//獲取到的背景圖片名as(圖片存到res/drawable文件下)
Stringas=a.split("")[1];
//動態獲取圖片getResources().getIdentifier(as,"drawable",getPackageName())
intresID=getResources().getIdentifier(as,"drawable",getPackageName());
//設置頁面背景setBackgroundResource()
main.setBackgroundResource(resID);
}
if(i>=0&&i<list.size()){
changeBack(i);
}
⑦ androidviewpager動態載入數據怎麼做
ViewmView=getLayoutInflater().inflate(R.layout.view,null);mVIewPager.setAdapter(adapter);適配器把兩個View裝進去,然後通過每個子View的findViewById方法找到子View的子控制項TextViewmTextView=mView1.findViewById(R.id.textView);mTextView.setText(".");
⑧ Android怎麼在listview中的item動態添加控制項。比如我不清楚究竟有幾張圖片需要解析數據後才知道
自定義adapter, getView裡面動態載入布局,先得確認你的圖片是怎麼擺放的,如,LinearLayout,
每個item裡面有個空的LinearLayout,
在getview, 每次獲取到viewholder後,viewholder.linearlayout.removeAllViews();
之後根據,解析過來的數據,往linearlayout.addview 就可以了
⑨ android 如何在imageView中顯示Bitmap動態圖片,
bitmap格式本身就不是動態的。
如果要顯示動態的bitmap的話可以使用定時器,定時改變imageview顯示的圖片。
imageview 設置圖片的時,只能使用bitmap以及drewable兩種資源,不能載入gif圖片。