android控制項坐標
⑴ android 如何獲取ListView適配器里控制項的位置
1、給最上層View添加OnTouchListener 或者使用activity的Ontouch獲得點擊按鈕的x,y坐標。
2、按鈕的長寬獲得比較麻煩,可以固定大小。
3、可以使用pupwindow直接新建窗口遮擋。
4、可以使用Cavas繪制窗口,傳入具體位置。
5、或者在xml中button後加一個隱藏的FrameLayout,裡面在加按鈕,設置View.GONE,背景不透明。
⑵ android 以控制項為坐標系如何做
樓上正解,例如一個imageview,setbitmap的話,拿的就是這個bitmap的高、寬,就例如屏幕的高、寬了,剛做了一個demon就是以一張圖片為地圖繪制經緯度
⑶ android HorizontalScrollView 左右移動之後,子控制項view 坐標與移動前的坐標不變。
如果下面用viewpager ,就用tablayout+viewpage,tablayout設置為滾動模式,如果不是,單純要位移,先算出上面文字textview距離最左邊距是多少,在設置紅線的leftmargin就好了,前提是,那紅線應該在HorizontalScrollView 的裡面,而不是在他外面
⑷ 請問:android如何動態添加控制項,給控制項添加「坐標」,「大小」等,求~~~~
在代碼中可以動態的添加、移除控制項;可以先獲得一個layout的根標簽layoutview,然後使用layoutview.addview(XXX),layoutview.removeview(XXX)之類的方法,動態添加、移除view,代碼中也是可以控制布局的,找點資料看看就明白了,幾句話也說不太明白。
⑸ 怎麼獲取控制項在屏幕上的位置android
getLocationOnScreen ,計算該視圖在全局坐標系中的x,y值,(注意這個值是要從屏幕頂端算起,也就是索包括了通知欄的高度)//獲取在當前屏幕內的絕對坐標
getLocationInWindow ,計算該視圖在它所在的widnow的坐標x,y值,//獲取在整個窗口內的絕對坐標 (不是很理解= =、)
getLeft , getTop, getBottom, getRight, 這一組是獲取相對在它父親里的坐標
如果在Activity的OnCreate()事件輸出那些參數,是全為0,要等UI控制項都載入完了才能獲取到這些。
import android.widget.ImageView;
public class LocationActivity extends Activity {
/** Called when the activity is first created. */
private ImageView t = null;
private Button button = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
t = (ImageView)findViewById(R.id.l);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new buttonListener());
}
public class buttonListener implements OnClickListener{
public void onClick(View v)
{
int[] location = new int[2];
t.getLocationOnScreen(location);
int x = location[0];
int y = location[1];
System.out.println("x:"+x+"y:"+y);
System.out.println("圖片各個角Left:"+t.getLeft()+"Right:"+t.getRight()+"Top:"+t.getTop()+"Bottom:"+t.getBottom());
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas、android、com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="button"/>
<ImageView
android:id="@+id/l"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/a" />
</LinearLayout>
⑹ android中:如何讓控制項的坐標隨解析度和尺寸大小變化
不要在代碼中寫,這樣肯定會不行的。在xml中布局就行了。
⑺ android布局控制項之LinearLayout詳解
Android布局控制項之LinearLayout詳解
LinearLayout是線性布局控制項,它包含的子控制項將以橫向或豎向的方式排列,按照相對位置來排列所有的widgets或者其他的containers,超過邊界時,某些控制項將缺失或消失。因此一個垂直列表的每一行只會有一個widget或者是container,而不管他們有多寬,而一個水平列表將會只有一個行高(高度為最高子控制項的高度加上邊框高度)。LinearLayout保持其所包含的widget或者是container之間的間隔以及互相對齊(相對一個控制項的右對齊、中間對齊或者左對齊)。
xml屬性
android:baselineAligned:是否允許用戶調整它內容的基線。
android:baselineAlignedChildIndex:當一個線性布局與另一個布局是按基線對齊的一部分,它可以指定其內容的基線對齊方式。
android:gravity:指定如何在該對象中放置此對象的內容(x/y坐標值)。
android:orientation:設置它內容的對其方向(橫向/豎向)。
gravity 這個英文單詞是重心的意思,在這里就表示停靠位置的意思。
android:layout_gravity 和 android:gravity 的區別
從名字上可以看到,android:gravity是對元素本身說的,元素本身的文本顯示在什麼地方靠著換個屬性設置,不過不設置默認是在左側的。
android:layout_gravity是相對與它的父元素說的,說明元素顯示在父元素的什麼位置。
比如說button:android:layout_gravity 表示按鈕在界面上的位置。 android:gravity表示button上的字在button上的位置。
可選值
這兩個屬性可選的值有:top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical。
而且這些屬性是可以多選的,用「|」分開。
默認這個的值是:Gravity.LEFT
LinearLayout還支持為其包含的widget或者是container指定填充權值。好處就是允許其包含的widget或者是container可以填充屏幕上的剩餘空間。這也避免了在一個大屏幕中,一串widgets或者是containers擠成一堆的情況,而是允許他們放大填充空白。剩餘的空間會按這些widgets或者是containers指定的權值比例分配屏幕。默認的 weight 值為0,表示按照widgets或者是containers實際大小來顯示,若高於0的值,則將Container剩餘可用空間分割,分割大小具體取決於每一個widget或者是container的layout_weight及該權值在所有widgets或者是containers中的比例。例如,如果有三個文本框,其中兩個指定的權值為1,那麼,這兩個文本框將等比例地放大,並填滿剩餘的空間,而第三個文本框不會放大,按實際大小來顯示。如果前兩個文本框的取值一個為2,一個為1,顯示第三個文本框後剩餘的空間的2/3給權值為2的,1/3大小給權值為1的。也就是權值越大,重要度越大。
如果LinearLayout包含子LinearLayout,子LinearLayout之間的權值越大的,重要度則越小。如果有LinearLayout A包含LinearLayout C,D,C的權值為2,D的權值為1,則屏幕的2/3空間分給權值為1的D,1/3分給權值為2的C。在LinearLayout嵌套的情況下,子LinearLayout必須要設置權值,否則默認的情況是未設置權值的子LinearLayout占據整個屏幕
⑻ 在android中如何改變控制項的坐標(例如一個button,我想讓它向右移動20dp)
RelativeLayout.LayoutParams ballLp = (android.widget.RelativeLayout.LayoutParams)b.getLayoutParams();
ballLp.leftMargin = 從你控制項的基礎上加20像素;
ballLp.topMargin = 不變:
b.setLayoutParams(ballLp);
這沒有移動的動畫,只是直接跳到次位置上
要有移動的話可以加動畫,或者讓這段代碼執行20次,每次leftMargin增加1就可以了。
⑼ android中獲得控制項的位置(相對於布局文件)
正確的代碼如下所示
java">TextViewtv=(TextView)findViewById(R.id.text);
tv.getViewTreeObserver().addOnGlobalLayoutListener(newOnGlobalLayoutListener(){
@Override
publicvoidonGlobalLayout(){
//這里執行獲取位置大小操作
intleft=tv.getLeft();
inttop=tv.getTop();
intbottom=tv.getBottom();
intright=tv.getRight();
//tv相對於父布局的坐標就得出來了
}
}
view的位置和大小是通過onLayout和onMeasure方法計算出來的,執行到activity的onCreate()方法時,尚未開始計算控制項的大小和位置,所以是取不到的
OnGlobalLayoutListener 是ViewTreeObserver的內部類,當一個視圖樹的布局發生改變時,可以被ViewTreeObserver監聽到,這是一個注冊監聽視圖樹的觀察者(observer),在視圖樹的全局事件改變時得到通知
除了OnGlobalLayoutListener ,ViewTreeObserver還有如下內部類:
interfaceViewTreeObserver.OnGlobalFocusChangeListener
當在一個視圖樹中的焦點狀態發生改變時,所要調用的回調函數的介面類
interfaceViewTreeObserver.OnGlobalLayoutListener
當在一個視圖樹中全局布局發生改變或者視圖樹中的某個視圖的可視狀態發生改變時,所要調用的回調函數的介面類
interfaceViewTreeObserver.OnPreDrawListener
當一個視圖樹將要繪制時,所要調用的回調函數的介面類
interfaceViewTreeObserver.OnScrollChangedListener
當一個視圖樹中的一些組件發生滾動時,所要調用的回調函數的介面類
interfaceViewTreeObserver.OnTouchModeChangeListener
當一個視圖樹的觸摸模式發生改變時,所要調用的回調函數的介面類
⑽ 在xml文件怎樣設置android 控制項位置
如果要求絕對精確的位置且布局不是很規律,那麼可以考慮絕對布局與相對布局。個人比較看中絕對布局,在絕對布局的左上角的坐標是(0,0),要把控制項放在什麼位置的話就用X,Y來確定控制項的位置。如果只是一個大致的位置且布局很規律,那麼推薦用線性布局。它是在一橫排或一豎排里把控制項一個個的排列出來,很好用。