gpt4 book ai didi

android - 以与用户手指在布局上移动相同的速度更改相对布局的高度

转载 作者:太空宇宙 更新时间:2023-11-03 10:45:20 25 4
gpt4 key购买 nike

我是开发新手,我正在创建一个应用程序,其中有一个相对布局,在该相对布局下方有一个 ListView。现在的问题是,当用户移动 ListView 时,当此 RelativeLayout 达到其最小阈值时,我必须动态地将此相对布局(蓝色背景)的高度从 300dp 更改为 140dp,即 140dp RelativeLayout 高度应停止减少并且 Listview 应在其移动正常速度。

这是下面的图片,在此先感谢

enter image description here

enter image description here

enter image description here

`

package com.example.testmovinglayout;

import java.util.ArrayList;
import java.util.Arrays;

import android.app.Activity;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class MainActivity extends Activity implements View.OnTouchListener {

Matrix matrix = new Matrix();
Matrix savedMatrix = new Matrix();

static final int NONE = 0;
static final int DRAG = 1;
static final int ZOOM = 2;
int mode = NONE;
private float[] matrixValues = new float[9];
float matrixX = 0; // X coordinate of matrix inside the ImageView
float matrixY = 0; // Y coordinate of matrix inside the ImageView
float width = 0; // width of drawable
float height = 0; // height of drawable
private float dx; // postTranslate X distance
private float dy; // postTranslate Y distance

PointF start = new PointF();
PointF mid = new PointF();
float oldDist = 1f;

int height_120dp;
int height_230dp;

private ListView mainListView;
private ArrayAdapter<String> listAdapter;
LinearLayout superLL;
LinearLayout parent_LLID;
RelativeLayout rlTest;
TextView _view;
// ViewGroup _root;
private int _xDelta;
private int _yDelta;

private int YThreshold;

// Create a string for the ImageView label
private static final String IMAGEVIEW_TAG = "icon bitmap";

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

final float scale = getResources().getDisplayMetrics().density;
height_120dp = (int) (120 * scale + 0.5f);
height_230dp = (int) (230 * scale + 0.5f);

rlTest = (RelativeLayout) findViewById(R.id.rlTest);
parent_LLID = (LinearLayout) findViewById(R.id.parent_LLID);
superLL = (LinearLayout) findViewById(R.id.superLL);

// Find the ListView resource.
mainListView = (ListView) findViewById(R.id.mainListView);

// Create and populate a List of planet names.
String[] planets = new String[] { "Mercury", "Venus", "Earth", "Mars",
"Jupiter", "Saturn", "Uranus", "Neptune" };
ArrayList<String> planetList = new ArrayList<String>();
planetList.addAll(Arrays.asList(planets));

// Create ArrayAdapter using the planet list.
listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow,
planetList);

// Add more planets. If you passed a String[] instead of a List<String>
// into the ArrayAdapter constructor, you must not add more items.
// Otherwise an exception will occur.
listAdapter.add("Ceres");
listAdapter.add("Pluto");
listAdapter.add("Haumea");
listAdapter.add("Makemake");
listAdapter.add("Eris");

// Set the ArrayAdapter as the ListView's adapter.
mainListView.setAdapter(listAdapter);

// _root = (ViewGroup)findViewById(R.id.root);

_view = new TextView(this);
_view.setText("TextView!!!!!!!!");

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.leftMargin = 0;
layoutParams.topMargin = 0;
layoutParams.bottomMargin = 0;
layoutParams.rightMargin = 0;
mainListView.setLayoutParams(layoutParams);

mainListView.setOnTouchListener(this);

}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onTouch(View v, MotionEvent event) {
final int X = (int) event.getRawX();
int Y = (int) event.getRawY();

Log.v("Y is : ", "" + Y);

switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
LinearLayout.LayoutParams lParams = (LinearLayout.LayoutParams) superLL
.getLayoutParams();
_xDelta = X - lParams.leftMargin;
_yDelta = Y - lParams.topMargin;

Log.v("event.getX() is : ", "" + event.getX());
Log.v("event.getY() is : ", "" + event.getY());
savedMatrix.set(matrix);
start.set(event.getX(), event.getY());
mode = DRAG;

Log.v("_yDelta is : ", "" + _yDelta);
break;
case MotionEvent.ACTION_UP:


Log.v("event.getX() is : ", "" + event.getX());
Log.v("event.getY() is : ", "" + event.getY());
savedMatrix.set(matrix);
start.set(event.getX(), height_120dp);
mode = DRAG;




break;
case MotionEvent.ACTION_POINTER_DOWN:



break;
case MotionEvent.ACTION_POINTER_UP:
break;
case MotionEvent.ACTION_MOVE:
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) superLL
.getLayoutParams();
// layoutParams.leftMargin = X - _xDelta;
layoutParams.topMargin = Y - _yDelta;
// layoutParams.rightMargin = 20;
// layoutParams.bottomMargin = -250;
superLL.setLayoutParams(layoutParams);
break;
}
parent_LLID.invalidate();
return true;
}

}
`





`
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/parent_LLID"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >


<LinearLayout
android:id="@+id/superLL"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/rlTest"
android:layout_width="match_parent"
android:layout_height="230dp"
android:background="#aafff7"
>
</RelativeLayout>

<ListView
android:id="@+id/mainListView"
android:background="#ffffff"
android:layout_below="@+id/rlTest"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</ListView>
</LinearLayout>
</LinearLayout>

`

最佳答案

而不是使用手势或 Action 事件,你应该尝试带标题的 ListView,它应该工作得很好

关于android - 以与用户手指在布局上移动相同的速度更改相对布局的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25013304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com